我有一个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,上面有一张图片。

有帮助吗?

解决方案

从内存中JWindow没有收到焦点/窗口事件。

其他提示

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

要成为焦点,需要使用父 Frame 创建 JWindow ,例如 new JWindow(parentFrame)。这样做,我认为你会发现当你将它设置为可见时它会自动获得焦点。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top