java - swing - windowlistener
如果我创建一个类,我将在我的JFrame中加载该类的一个对象(该类基本上是一个包含按钮和文本对象的面板,但这并不重要)直到我的公共静态无效的主要(字符串[] ARGS){(这是在类代码下面),我如何将WindowListener和其他监听器关联到该JFrame,因为它不是原始类的分开?java - swing - windowlistener
正常情况下,当我遇到这个问题时,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类感兴趣,但有必要将它们分开。我将致力于编辑我的代码。干杯。 – harveytech
一些代码说明你的困惑会有所帮助。 –
代码示例会很好! –