我的 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() 方法。