- - - - - - 编辑 - - - - - - - -
问题:我写了一个JTextField,它有一个弹出窗口。这个弹出窗口是一个未装饰的JFrame。由于代码已经由其他人编写,现在我想实现如下:
1.当弹窗失去焦点时,关闭弹窗。
2.当使用点击JTextField时,如果弹出窗口打开,关闭弹出窗口,否则打开弹出窗口。
如何实施?
以下是我的尝试,但存在冲突。
首先,我有一个带有 MouseListener 的 JTextField,用于触发 JFrame 弹出窗口。
public void mousePressed(MouseEvent arg0) {
if (TextField.this.isEnabled() && !popup.isVisible() && TextField.this.isEditable())
open();
else if (popup.isVisible()) {
popup.setVisible(false);
}
}
我将 windowfocuslistener 添加到 JFrame(popup) 以确保当焦点丢失时它可以关闭。如下所示:
popup.addWindowFocusListener(new WindowFocusListener() {
@Override
public void windowLostFocus(WindowEvent e) {
popup.setVisible(false);
}
}
所以问题来了,当我第一次点击 JTextField 时,它会打开日期弹出窗口,当我再次点击 JTextField 时,它会首先调用 windowlostfocus 来设置可见(假)。然后鼠标监听,将打开日期弹出窗口。这不是我的想法,我想在再次单击时关闭弹出窗口。有人有想法避免这种情况吗?谢谢你的帮助。