3

我正在创建一个应用程序Swing,但我遇到了问题。我想处理focusLost()andfocusGained()事件,但我认为我的代码有问题。

我有以下测试代码:

addWindowFocusListener(new WindowFocusListener() {
    @Override
    public void windowLostFocus(WindowEvent e) {
        System.out.println("Lost!");
        System.out.println(e.toString());
    }

    @Override
    public void windowGainedFocus(WindowEvent e) {
        System.out.println("Gained!");
        System.out.println(e.toString());
    }
});

而且,当我激活窗口时,似乎应用程序一次处理 2 个事件:

获得!
java.awt.event.WindowEvent[WINDOW_GAINED_FOCUS,opposite=null,oldState=0,newState=0] on frame0
丢失的!
java.awt.event.WindowEvent[WINDOW_LOST_FOCUS,opposite=null,oldState=0,newState=0] 在 frame0

而且,当我停用窗口时,程序什么也不打印。

还有更有趣的事情。当我打开一个JFrame属于我的应用程序的新应用程序时,事件系统可以正常工作,即使我关闭了这一秒Window

我只是不知道为什么会这样。请帮忙。

系统规格:

  • 操作系统:Ubuntu 12.04 x86_64
  • JVM:OpenJDK 7
m4tx@m4tx-EP35-DS4:~$ java -version
拿起_JAVA_OPTIONS:-Dawt.useSystemAAFontSettings=lcd
java版本“1.7.0_03”
OpenJDK 运行环境 (IcedTea7 2.1.1pre) (7~u3-2.1.1~pre1-1ubuntu3)
OpenJDK 64 位服务器 VM(构建 22.0-b10,混合模式)
4

1 回答 1

4

好吧,我看不出你的代码有什么问题;所以我整理了一个快速演示,它似乎工作正常:

import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class WindowEventDemo extends JFrame implements WindowFocusListener {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new WindowEventDemo("Window Event Demo").setVisible(true);
            }
        });
    }

    public WindowEventDemo(String name) {
        super(name);
        addWindowFocusListener(this);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 300);
    }

    @Override
    public void windowGainedFocus(WindowEvent e) {
        System.out.println("WindowFocusListener method called: windowGainedFocus.");
    }

    @Override
    public void windowLostFocus(WindowEvent e) {
        System.out.println("WindowFocusListener method called: windowLostFocus.");
    }
}

启动时会打印:

WindowFocusListener 方法调用:windowGainedFocus。

当窗口最小化,或者鼠标点击屏幕上的其他地方时,除了JFrame打印:

WindowFocusListener 方法调用:windowLostFocus。

于 2012-07-23T17:42:15.273 回答