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

Java 使Swing组件出现而无需调整应用程序的大小,java,swing,repaint,event-dispatch-thread,thread-sleep,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 bein

我在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();
问题是在第一个组件之后再加载另一个组件,但是当我第一次加载我的应用程序时,我仍然需要调整它的大小

我很高兴听到解决这个问题的更好办法

提前感谢。

您可以使用:

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

或者你可以使用

setSize()
调整此构件的大小,使其具有宽度和高度

您可以使用:

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

或者你可以使用

setSize()
调整此构件的大小,使其具有宽度和高度

您可以使用:

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

或者你可以使用

setSize()
调整此构件的大小,使其具有宽度和高度

您可以使用:

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

或者你可以使用

setSize()
调整此构件的大小,使其具有宽度和高度


似乎还需要调用帧的
validate()
方法

e、 g


来源:

您似乎还需要调用帧的
validate()
方法

e、 g


来源:

您似乎还需要调用帧的
validate()
方法

e、 g


来源:

您似乎还需要调用帧的
validate()
方法

e、 g


来源:

调用
setVisible
last,在初始化主UI之后调用
setVisible
last,在初始化主UI之后调用
setVisible
last,在初始化主UI之后调用
setVisible
last,初始化主UI后

一起调用frame.validate()和frame.repaint()。1)为了更快地获得更好的帮助,请发布一个(最简单的完整且可验证的示例)。2) 该代码违反了EDT规则。有关更多详细信息,请参阅。一起调用frame.validate()和frame.repaint()。1)要更快获得更好的帮助,请发布一个(最简单的完整和可验证的示例)。2) 该代码违反了EDT规则。有关更多详细信息,请参阅。一起调用frame.validate()和frame.repaint()。1)要更快获得更好的帮助,请发布一个(最简单的完整和可验证的示例)。2) 该代码违反了EDT规则。有关更多详细信息,请参阅。一起调用frame.validate()和frame.repaint()。1)要更快获得更好的帮助,请发布一个(最简单的完整和可验证的示例)。2) 该代码违反了EDT规则。有关详细信息,请参阅。@Crypto确定。那么别忘了接受这个正确答案。:)实际上,代码应该是revalidate(),然后是repaint()。revalidate()用于调用布局管理器。然后,有时需要使用repaint()来确保重新绘制组件。所以答案确实不正确。@Crypto Ok。那么别忘了接受这个正确答案。:)实际上,代码应该是revalidate(),然后是repaint()。revalidate()用于调用布局管理器。然后,有时需要使用repaint()来确保重新绘制组件。所以答案确实不正确。@Crypto Ok。那么别忘了接受这个正确答案。:)实际上,代码应该是revalidate(),然后是repaint()。revalidate()用于调用布局管理器。然后,有时需要使用repaint()来确保重新绘制组件。所以答案确实不正确。@Crypto Ok。那么别忘了接受这个正确答案。:)实际上,代码应该是revalidate(),然后是repaint()。revalidate()用于调用布局管理器。然后,有时需要使用repaint()来确保重新绘制组件。所以答案确实是不正确的。不要使用
setSize()
,使用
pack()
。设置大小只是一种猜测,打包它会导致显示组件所需的正确(最小)大小。如图所示。具有讽刺意味的是,该代码在PLAF更改时调用
pack()
,而不是添加新组件,这些组件在GUI中显示在滚动窗格中,无需打包UI!;)不要使用
setSize()
,使用
pack()
。设置大小只是一种猜测,打包它会导致显示组件所需的正确(最小)大小。如图所示。具有讽刺意味的是,该代码在PLAF更改时调用
pack()
,而不是添加新组件,这些组件在GUI中显示在滚动窗格中,无需打包UI!;)不要使用
setSize()
,使用
pack()
。设置大小只是一种猜测,打包它会导致显示组件所需的正确(最小)大小。如图所示。讽刺的是,该代码在PLAF更改时调用
pack()
,而不是添加新组件