如何在WindowClosing事件期间更新JFrame对象?

时间:2017-12-19 02:00:59

标签: java swing jframe

我有几个关闭步骤需要在处理之前在WindowClosing事件期间执行。一切都正常执行,但我想添加在关闭的JFrame中的现有JLabel中提供关闭状态消息的功能。是否可以在WindowClosing事件期间更新JLabel文本?

3 个答案:

答案 0 :(得分:0)

不确定。只需确保在开始与组件交互之前不处理组件。

SwingUtilities.invokeLater(new Runnable() {
     public void run() {
            // update label here
     }
});

答案 1 :(得分:0)

  

但我想添加在关闭JFrame中的现有JLabel中提供关闭状态消息的功能

label.setText(....);
label.paintImmediately(label.getBounds());

侦听器中的代码在Event Dispatch Thread上执行,因此GUI不会重新绘制自己,直到执行所有侦听器代码,到那时GUI将被关闭。

paintImmediately(...)将允许组件绕过RepaintManager并立即绘制自己。

答案 2 :(得分:0)

我使用以下代码在后台执行关机步骤,然后关闭JFrame。

frame.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {      
        SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
            @Override
            public Void doInBackground() {

                // shutdown steps go here and can update the JLabel text

                frame.dispose();
                return null;
            }
        };
        worker.execute();
    }
});