gpt4 book ai didi

java - 窗口焦点事件的意外行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:36 24 4
gpt4 key购买 nike

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

我有以下测试代码:

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 个事件:

Gained!java.awt.event.WindowEvent[WINDOW_GAINED_FOCUS,opposite=null,oldState=0,newState=0] on frame0Lost!java.awt.event.WindowEvent[WINDOW_LOST_FOCUS,opposite=null,oldState=0,newState=0] on frame0

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

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

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

系统规范:

  • 操作系统:Ubuntu 12.04 x86_64
  • JVM:OpenJDK 7
m4tx@m4tx-EP35-DS4:~$ java -versionPicked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=lcdjava version "1.7.0_03"OpenJDK Runtime Environment (IcedTea7 2.1.1pre) (7~u3-2.1.1~pre1-1ubuntu3)OpenJDK 64-Bit Server VM (build 22.0-b10, mixed mode)

最佳答案

嗯,我看不出你的代码有什么问题;所以我整理了一个快速演示,它似乎运行良好:

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 method called: windowGainedFocus.

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

WindowFocusListener method called: windowLostFocus.

关于java - 窗口焦点事件的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11617151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com