正如评论和其他答案中已经指出的那样:
这不会直接回答您的问题。您的问题的答案是: 。如果您setVisible
在添加所有组件之前进行调用,则在某些情况下,它可能 适用于某些程序,某些PC,某些Java版本和某些操作系统,但是您 必须期望它可能无法按预期方式工作某些情况下。
您可以在stackoverflow和其他地方找到许多相关问题。这些问题的通常症状是某些组件无法正确显示,然后在调整窗口大小时突然出现。(调整窗口大小基本上会触发布局和重新绘制)。
当您违反Swing的线程规则时,意外行为的可能性会增加。而且,从某种意义上讲,您确实违反了Swing的线程规则:您应该始终在事件调度线程上创建GUI!
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class SomeSwingGUI
{
public static void main(String[] args)
{
SwingUtilities.invokelater(new Runnable()
{
@Override
public void run()
{
createAndShowGUI();
}
});
}
// This method may (and will) only be called
// on the Event Dispatch Thread
private static void createAndShowGUI()
{
JFrame f = new JFrame();
// Add your components here
f.setVisible(true); // Do this last
}
}
顺便提一下:Timothy Truckle在评论中指出,您不应setVisible
从构造函数中调用它。这是真的。更重要的是:您通常 不 应该直接创建that的类extends JFrame
。(在一些(罕见!)的情况下,这是合适的,但总的指导原则应该是 不能 延长JFrame
)