当显示文本字段的弹出菜单时,如何禁止文本字段的focusLost?

时间:2012-04-26 15:26:30

标签: java swing textbox popupmenu jpopup

谢谢你的回复。 我将使用下面的代码(忽略导入)来显示我的问题。 (简而言之,将上面的文本字段称为“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 个答案:

答案 0 :(得分:0)

这会阻止弹出菜单从文本字段中抓取焦点:menu.setFocusable(false);