3

我有一个 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。

4

5 回答 5

3

从内存中,JWindow 不接收焦点/窗口事件。

于 2009-09-16T06:08:45.253 回答
2

您应该调用setFocusableWindowState(true)aJWindow以使其具有焦点。但这“仍然”是不够的。还必须有可聚焦的JWindow组件,但我仍然无法让它工作。使用JFrame setUndecorated()似乎是最好的选择。

于 2011-11-26T14:35:39.570 回答
2

要获得焦点, aJWindow需要与父级一起创建Frame,例如new JWindow(parentFrame). 这样做,我认为您应该会发现,当您将其设置为可见时,它会自动获得焦点。

于 2012-06-26T15:29:40.410 回答
0

不太确定您要做什么。如果您尝试手动隐藏弹出窗口,那么您可能应该使用 WindowListener 并处理 windowDeactivated 事件。

于 2009-09-16T03:16:48.370 回答
0

如果你真的想显示一个弹出菜单,你应该使用 JPopupMenu,而不是自己实现它。

于 2009-09-16T05:10:40.583 回答