gpt4 book ai didi

java - swing - 窗口监听器

转载 作者:行者123 更新时间:2023-11-30 06:34:12 31 4
gpt4 key购买 nike

如果我正在创建一个类,我将在我的 JFrame 中加载该类的一个对象(该类基本上是一个带有按钮和文本对象的面板,但这并不重要)直到我的 public static void main(String[] args) { (在类代码下方),我如何将 WindowListener 和其他监听器关联到该 JFrame,因为它不是原始类的一部分?

通常当我遇到这个问题时,Eclipse 会告诉我将 JFrame 或其他对象设为静态并普遍调用它,但我试过了,但我认为它不适用于 JFrame 的实例。

我已通读 http://download.oracle.com/javase/tutorial/uiswing/events/windowlistener.html和其他教程,但我想要一个一般性的答案,以及对我的应用程序的这个特定问题的答案,因为我经常遇到这个问题。

感谢任何能提供帮助或阅读本文的人!

最佳答案

向我们展示您现有的代码将使您更清楚地了解您正在尝试做什么,但听起来好像您有一个类既代表您的面板又包含您的 main 方法。这是可能的,但我不推荐它,因为它模糊了应用程序的结构,尽管它是教程中的一种流行技术,因为它使所有内容都适合一个文件。

WindowListener 表示任何需要响应窗口事件的对象,即窗口状态的变化(在本例中为 JFrame)被激活时,图标化等。监听器也可以表示图形组件,但不需要这样做。

这是一个非常简单的例子,我希望它能说明这些概念。让我们创建一个表示一种面板类型的类,其中包含一个 JLabel,它将显示到目前为止发生的窗口事件的数量。它还将实现 WindowListener,以便它可以收到这些事件的通知,并在每次发生事件时增加一个计数器。

您应该能够按原样编译和运行此代码,然后在您最小化/最大化窗口、单击其他窗口等时观察计数器的变化。

import java.awt.event.*;
import javax.swing.*;

public class TestPanel extends JPanel implements WindowListener {
private JLabel label = new JLabel("No window events yet");
private int numEvents = 0;

public TestPanel() {this.add(label);}

private void update() {
label.setText(String.format("%d events",numEvents));
}

public void windowOpened(WindowEvent e) {
numEvents++;
update();
}

// ... similar implementations of the other WindowListener methods ...
}

然后我们需要一个主程序来实例化我们的面板之一并将其显示在 JFrame 中。

import javax.swing.*;

public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndDisplayGui();
}
});
}

private static void createAndDisplayGui() {
JFrame frame = new JFrame("Test Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TestPanel panel = new TestPanel();
frame.add(panel); // add the panel as a component in the frame
frame.addWindowListener(panel); // add the panel as a listener to the frame
frame.pack(); // lay out and size the frame
frame.setVisible(true); // display the frame
}
}

关于java - swing - 窗口监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7289086/

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