无需调整应用程序大小即可显示Swing组件

时间:2014-04-17 11:43:08

标签: java swing repaint event-dispatch-thread thread-sleep

我在JFrame中加载组件时遇到问题。在重新确定窗口之前,该组件不会出现。我搜索了这个问题并找到了一个解决方案:

Thread repainter = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) { // I recommend setting a condition for your panel being open/visible
                    frame.repaint();
                    try {
                        Thread.sleep(30);
                    } catch (InterruptedException ignored) {
                    }
                }
            }
        });

        repainter.setName("Panel repaint");
        repainter.setPriority(Thread.MIN_PRIORITY);
        repainter.start();

问题是这可以在第一个组件之后加载另一个组件,但是当我第一次加载我的应用程序时,我仍然需要调整它的大小。

我很高兴听到解决这个问题的更好解决方案。

提前致谢。

3 个答案:

答案 0 :(得分:1)

你可以使用:

pack();
  

它会使此窗口的大小适合其子组件的首选大小和布局。如果窗口和/或其所有者尚不可显示,则在计算首选大小之前,两者都可显示。在计算preferredSize后,将验证窗口。

或者您可以使用

setSize()
  

调整此组件的大小,使其具有宽度宽度和高度。

答案 1 :(得分:1)

您似乎也需要调用框架的validate()方法。

e.g。

 frame.repaint();
 frame.validate();

来源:more information here

答案 2 :(得分:1)

在初始化主要用户界面后,最后致电setVisible