【发布时间】:2010-11-13 20:27:42
【问题描述】:
我的 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() 方法。
【问题讨论】:
-
弹出菜单的作用是什么?
-
对我来说似乎很奇怪,您在弹出菜单中有一个文本字段。这种方法背后的动机是什么?也许还有另一种方法可以做到这一点......
标签: java user-interface swing events awt