【问题标题】:close java frame using code [duplicate]使用代码关闭java框架[重复]
【发布时间】:2011-08-15 08:58:33
【问题描述】:

可能重复:
How to programmatically close a JFrame

我正在使用 JFrame 开发一个 java GUI。我想关闭 GUI 框架并通过代码将其处理掉。 我已经实现了:

topFrame.addWindowListener(new WindowListener()
        {
            public void windowClosing(WindowEvent e)
            {
                emsClient.close();
            }
            public void windowOpened(WindowEvent e) {
            }
            public void windowClosed(WindowEvent e) {
            }
            public void windowIconified(WindowEvent e) {
            }
            public void windowDeiconified(WindowEvent e) {
            }
            public void windowActivated(WindowEvent e) {
            }
            public void windowDeactivated(WindowEvent e) {
            }
        });`

如何调用 windowClosing 事件?还是有其他方法?

【问题讨论】:

标签: java events swing jframe


【解决方案1】:

这将以编程方式触发窗口关闭事件:

topFrame.dispatchEvent(new WindowEvent(topFrame, WindowEvent.WINDOW_CLOSING));

如果你想关闭你需要调用的框架:

topFrame.dispose();

【讨论】:

  • 关于JDialog的相关Q&A
【解决方案2】:

调用dispose()方法怎么样?

【讨论】:

  • 刚刚试过,dispose() 不会触发关闭窗口事件。它确实关闭了窗口。
【解决方案3】:

你需要这个:

yourFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

您可以在构造函数中添加该行(不要忘记它)。

【讨论】:

  • 好吧,我认为 OP 想以编程方式关闭它。
  • 如果是这样,他只需要捕获事件以关闭并调用 dispose()。但我不明白,为什么不在构造函数中添加该方法。一些 IDE 在创建 JFrame 时甚至会自动添加它。
【解决方案4】:
import java.awt.event.*;
import javax.swing.*;

class CloseFrame {

    public static void main(String[] args) {

        Runnable r = new Runnable() {

            public void run() {
                JButton close = new JButton("Close me programmatically");
                final JFrame f = new JFrame("Close Me");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setContentPane( close );
                close.addActionListener( new ActionListener(){
                    public void actionPerformed(ActionEvent ae) {
                        // make the app. end (programatically)
                        f.dispose();
                    }
                } );
                f.pack();
                f.setLocationByPlatform(true);
                f.setVisible(true);
            }
        };

        SwingUtilities.invokeLater(r);
    }
}

【讨论】:

  • 优秀sscce,但不会触发提问者的WindowListener;根据接受的答案,我猜这就是目标。
  • 只是跑题了,感谢您添加 Mac。嵌套布局示例的屏幕截图。 :)
猜你喜欢
  • 2012-08-06
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
相关资源
最近更新 更多