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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在WindowClosing事件期间更新JFrame对象?相关的知识,希望对你有一定的参考价值。

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

答案

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

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

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

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

侦听器中的代码在Event Dispatch Thread上执行,因此GUI在执行所有侦听器代码之前无法重新绘制,并且此时GUI将被关闭。

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

另一答案

我使用以下代码在后台执行关机步骤,然后关闭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();
    }
});

以上是关于如何在WindowClosing事件期间更新JFrame对象?的主要内容,如果未能解决你的问题,请参考以下文章

JFR 如何计算事件开始时间?

JDK14的新特性:JFR,JMC和JFR事件流

JDK14的新特性:JFR,JMC和JFR事件流

如何创建可重用的即时(持续时间)Java Flight Recorder JFR 事件?

为啥 JFR 会跳过事件字段

内置 JFR(Java Flight Recorder)事件记录在哪里?