如何开火?

时间:2013-10-02 19:13:47

标签: java swing

我有以下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(){...}

即。正常括号后跟卷曲的?

3 个答案:

答案 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,因此无需为其保留命名引用。