Спасибо, ребята, за ваш ответ. Я буду использовать коды ниже (импорт игнорируется), чтобы показать мою проблему. (коротко, вызовите указанное текстовое поле как «поле1», вызовите приведенное ниже текстовое поле как «поле2»). В dilaog, когда я ввожу в поле 1 и щелкните поле2, поле2 отобразит текст в поле1. , но если я вхожу в поле1 и покажу его всплывающее меню для копирования/вставки, я НЕ хочу показывать текст поля1 в поле2.Когда отображается всплывающее меню для текстового поля, как запретить focusLost текстового поля?
public class MyDialog extends JDialog {
public MyDialog() {
final JTextField name = new JTextField(20);
name.setEditable(true);
final JTextField clone = new JTextField(20);
clone.setEditable(true);
getContentPane().setLayout(new GridLayout(2, 1));
getContentPane().add(name);
getContentPane().add(clone);
name.addFocusListener(new FocusAdapter() {
public void focusLost(FocusEvent e) {
clone.setText(name.getText());
}
});
addPopupMenu(name);
}
private void addPopupMenu(final JTextField name) {
JPopupMenu menu = new JPopupMenu();
JMenuItem copyItem = menu.add(name.getActionMap().get(DefaultEditorKit.copyAction));
copyItem.setText("copy");
JMenuItem pasteItem = menu.add(name.getActionMap().get(DefaultEditorKit.pasteAction));
pasteItem.setText("paste");
name.setComponentPopupMenu(menu);
}
public static void main(String args[]){
MyDialog dlg = new MyDialog();
dlg.setSize(500, 200);
dlg.setVisible(true);
}
}
для лучшей помощи рано изменить вопрос с [SSCCE] (http://sscce.org/) – mKorbel
I не думайте, что вам нужно вмешиваться в фокусировку ваших компонентов, пожалуйста, покажите нам, что ваша проблема, и дайте небольшой пример того, что не работает для вас. – Terraego
Попробуйте ['setComponentPopupMenu()'] (http://docs.oracle.com /javase/6/docs/api/javax/swing/JComponent.html#setComponentPopupMenu%28javax.swing.JPopupMenu%29). – trashgod