窗口总是在顶部没有获得焦点事件

时间:2009-09-16 02:38:33

标签: java swing jlabel jwindow

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

5 个答案:

答案 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,而不是自己实现它。