一種方法:使JTextField中不可聚焦通過field.setFocusable(false);
這將使該領域接受的文本,但不允許用戶以實際獲取其重點,防止他打字進入該領域。
證明的概念代碼:
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import javax.swing.*;
import javax.swing.text.JTextComponent;
@SuppressWarnings("serial")
public class DragAndDropTest extends JPanel {
private static final String[] LIST_DATA = {"One", "Two", "Three", "Four",
"Five", "Six", "Seven", "Eight", "Nine", "Ten"};
private JList<String> list = new JList<>(LIST_DATA);
private JTextField textField = new JTextField(10);
public DragAndDropTest() {
list.setVisibleRowCount(6);
textField.setFocusable(false); // *** here we go! ***
textField.setTransferHandler(new MyTransferHandler());
list.setPrototypeCellValue("abcdefghijkl");
list.setDragEnabled(true);
add(new JScrollPane(list));
add(textField);
}
private class MyTransferHandler extends TransferHandler {
@Override
public int getSourceActions(JComponent c) {
return COPY_OR_MOVE;
}
@Override
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
if (Arrays.asList(transferFlavors).contains(DataFlavor.stringFlavor)) {
return true;
} else {
return false;
}
}
@Override
public boolean importData(TransferSupport support) {
// allow the JTextField's text to be *replaced* on drop
try {
String text = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor);
((JTextComponent) support.getComponent()).setText(text);
return true;
} catch (UnsupportedFlavorException | IOException e) {
return false;
}
}
}
private static void createAndShowGui() {
JFrame frame = new JFrame("DragAndDrop");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new DragAndDropTest());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
也許你想要的是調用'field.setFocusable(假);' –