我的 java gui 代码似乎有问题,我不知道为什么它不起作用。
需要发生的是当鼠标单击面板或框架时 -现在让我们说面板;因为这只是一个测试,最终这个代码将为另一个 gui 组件实现,但我想先让它工作-弹出菜单需要变得可见并且需要在文本字段上设置焦点。然后,当用户按下回车键或文本字段上的焦点丢失时,弹出菜单需要隐藏并且文本重置为空白或我需要的任何内容。
所以这就是我写的:
public class Test {
    private final JFrame frame = new JFrame();
    private final JPanel panel = new JPanel();
    private final JPopupMenu menu = new JPopupMenu();
    private final JTextField field = new JTextField();
    private final Obj obj;
    //... constructor goes here
    public void test(){
        frame.setSize(new Dimension(200,200));
        field.setColumns(10);
        field.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0) {
                obj.method(field.getText());
                menu.setVisible(false);
                field.setText("");
            }
        });
        field.addFocusListener(new FocusListener() {
             public void focusLost(FocusEvent e) {
                 menu.setVisible(false);
                 field.setText("");
             }
             //... focus gained event goes here
        });
        panel.addMouseListener(new MouseListener() {
            public void mouseClicked(MouseEvent e) {
                menu.setLocation(e.getX(), e.getY());
                menu.setVisible(true);
                field.requestFocusInWindow();
            }
            //... other mouse events go here
        });
        menu.add(field);
        frame.getContentPane().add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
使用此处编写的代码,我单击后菜单会立即自动隐藏。它只是在屏幕上短暂闪烁,然后在我不做任何其他事情的情况下隐藏。
如果我更改代码以排除任何出现的情况,menu.setVisible(false)那么文本字段将永远不会获得焦点。
这是由于滥用 JPopupMenu 造成的吗?我哪里错了?
另请注意,我遗漏了 main 或 Obj。它们在另一个文件中,很可能对这个问题无关紧要。Obj.method() 什么都不做,main 只调用 Test 的构造函数和 test() 方法。