【发布时间】:2015-01-08 23:26:42
【问题描述】:
我在显示 JFrame 时遇到困难,所有内容都会立即显示。我想显示已添加所有 Components 的 JFrame,但窗口似乎变得失焦,请稍等,然后在添加 Component(s) 的情况下聚焦。我的 SSCCE 的代码非常短/简单,所以我不知道为什么会出现这种效果。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DelayTest
{
public static void main(String[] args)
{
JLabel label = new JLabel("DELAY TEST");
label.setHorizontalAlignment(JLabel.CENTER);
label.setPreferredSize(new Dimension(400, 60));
JFrame frame = new JFrame("Delay Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(label);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
我知道如果我注释掉label.setPreferredSize(new Dimension(400,60));,这种影响就不会发生,所以虽然它可能只是一种相关而不是因果关系,但我猜想PreferredSizes 与它有关。但是,为什么?
另外,即使我在主线程之外的单独 Runnable 线程中创建 GUI,也会出现这种效果。虽然显然效果与线程执行的顺序有关,但我不认为具体因素是原因。
启动时:
大约 1 秒后:
【问题讨论】:
-
确保 UI 在 EDT 的上下文中启动
标签: java multithreading swing jframe delay