Когда показывать всплывающее меню для текстового поля, как запретить focusLost текстового поля?

Спасибо, ребята, за ваш ответ. Я буду использовать коды ниже (импорт игнорируется), чтобы показать мою проблему. (для краткости, назовите вышеупомянутое текстовое поле как "field1", назовите нижеследующее текстовое поле как "field2"). В dilaog, когда я ввожу в field1 и нажимаю field2, field2 будет показывать текст в field1. но если я введу в field1 и покажу его всплывающее меню для копирования / вставки, я НЕ хочу показывать текст field1 в field2.

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);
    }
}

1 ответ

Это останавливает всплывающее меню от захвата фокуса от текстового поля: menu.setFocusable(false);

Другие вопросы по тегам