我有以下java代码片段:
public static void main(String[] args) {
String filename = args[0];
JFrame f = new JFrame("Load Image Sample");
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.add(new LoadImageApp(filename));
f.pack();
f.setVisible(true);
}
其中定义了WindowClosing
事件。如何在我的代码中触发/执行/启动此事件,从而导致代码退出?
其他问题:我在代码中看到的结构是什么:
new WindowAdapter(){...}
即。正常括号后跟卷曲的?
答案 0 :(得分:2)
看看这个链接。希望它有所帮助
http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html
http://weblogs.java.net/blog/joshy/archive/2006/02/all_hail_the_pr.html
此外,在这种特定情况下,您实际上并不需要触发事件,因为它所做的只是调用System.exit(0)
。您希望手动触发代码中事件的唯一原因是模仿某人单击“X”按钮关闭窗口(而不是通过其他方式关闭程序)。
答案 1 :(得分:2)
有关此主题的一般概念,请参阅Closing an Application。
ExitAction
显示了将事件分派到帧的一种方法。 Action旨在与JMenuItem或JButton一起使用,使用户能够通过其他方式关闭框架,而不是单击" X"。
答案 2 :(得分:0)
嗯,模拟事件真的没有意义。为什么?因为当事件被触发时,它意味着你的应用程序中发生了一些事情,这就是“Java”告诉你的方式:“嘿发生了什么!这是事件所以你可以适当地处理它。”在您的情况下,可能是用户按下X按钮,或操作系统关闭。你真正想要做的是关闭应用程序,而不是触发事件。考虑一下:
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
ThisClassName.this.shutDown();
}
});
//...
}
private void shutDown(){
System.exit(0);
}
这样,您可以从任何地方调用shutDown()。
关于括号,它被称为Anonymous类。这是一个像任何其他类一样的类,它只是没有名字。由于JFrame需要WindowListener作为addWindowListener函数的参数,因此需要传递它。问题是,您不需要在代码中的任何其他位置使用WindowAdapter,因此无需为其保留命名引用。