有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何触发事件?

我有以下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) 个答案

  1. # 1 楼答案

    关于这一主题的一些一般想法,见Closing an Application

    ExitAction显示了将事件分派到帧的一种方法。该操作旨在与JMenuItem或JButton一起使用,以使用户能够通过单击“X”以外的其他方式关闭框架

  2. # 3 楼答案

    嗯,模拟这个事件真的没有意义。为什么?因为当事件被触发时,它意味着应用程序中发生了一些事情,这是“Java”告诉您的方式:“嘿,发生了什么事情!这是事件,您可以适当地处理它。”。在您的情况下,可能是用户按下X按钮,或者操作系统关闭。在这里,您真正想要做的是关闭应用程序,而不是触发事件。考虑这一点:

    f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e) {
                ThisClassName.this.shutDown();
            }
        });
    //...
    }
    
    private void shutDown(){
        System.exit(0);
    }
    

    这样,您就可以在任何地方调用shutDown()

    关于括号,它被称为匿名类。它和其他类一样,只是没有名字。由于JFrame需要WindowListener作为其addWindowListener函数中的参数,因此需要传递它。问题是,在代码的其他任何地方都不需要WindowAdapter,因此不需要保留对它的命名引用