使Swing组件出现而无需调整我的应用程序大小

问题描述 投票:0回答:3

我在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();

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

我很高兴听到解决此问题的任何更好的解决方案。

提前感谢。

java swing repaint event-dispatch-thread thread-sleep
3个回答
1
投票

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

例如

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

来源:more information here


1
投票

您可以使用:

pack();

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

或者您可以使用

setSize()

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


1
投票

初始化主用户界面后,最后一次致电setVisible

© www.soinside.com 2019 - 2024. All rights reserved.