我有一个jwindow(设置为始终位于顶部),您可以单击以获取弹出菜单。如果用户右键单击窗口,则显示弹出菜单,但如果用户单击任何其他窗口(例如firefox),则弹出菜单不会消失。
我尝试通过在jwindow上添加FocusListener来修复它,我实现了FocusListener并覆盖
public void focusGained(FocusEvent e) {
System.out.println("gain" );
}
public void focusLost(FocusEvent e) {
System.out.println("lost" );
}
但事件永远不会被调用。我也试过以下,
addWindowFocusListener(new WindowAdapter() {
public void windowGainedFocus(WindowEvent e) {
System.out.println("gain 2" );
}
});
此事件也未被调用。
所有这些jwindows都有一个JLabel,上面有一张图片。
答案 0 :(得分:3)
从内存中JWindow没有收到焦点/窗口事件。
答案 1 :(得分:2)
您可以在setFocusableWindowState(true)
上致电JWindow
以使其可以调焦。但那“仍然”还不够。 JWindow
还必须具有可聚焦的组件,我仍然无法使其工作。
使用JFrame setUndecorated()
似乎是最佳选择。
答案 2 :(得分:2)
要成为焦点,需要使用父JWindow
创建Frame
,例如new JWindow(parentFrame)
。这样做,我认为你会发现当你将它设置为可见时它会自动获得焦点。
答案 3 :(得分:0)
不确定你要做什么。如果您试图手动隐藏弹出窗口,那么您应该使用WindowListener并处理windowDeactivated事件。
答案 4 :(得分:0)
如果你真的想要显示一个弹出菜单,你应该使用JPopupMenu,而不是自己实现它。