Java Can';t在Swing中向JPanel添加组件

Java Can';t在Swing中向JPanel添加组件,java,swing,jpanel,jlabel,Java,Swing,Jpanel,Jlabel,我想在运行时在紫色窗格下添加一个JLabel,该窗格已包含一些组件,例如在进度栏下: 以下是元素的结构: 这是我的代码,它是在事件发生时发布的(我用debug检查了它的到达): 我看不到任何变化,也不知道接下来该怎么办。当我把一个 然后在我尝试添加JLabel组件的同一位置调用它的setText()方法 只是一种预感,但除了revalidate()之外,可能还需要调用repaint() 您需要了解更多关于布局及其工作原理的信息。我强烈建议您阅读整个布局管理器教程,因为理解布局是这里的解决方案

我想在运行时在紫色窗格下添加一个JLabel,该窗格已包含一些组件,例如在进度栏下:

以下是元素的结构:

这是我的代码,它是在事件发生时发布的(我用debug检查了它的到达):

我看不到任何变化,也不知道接下来该怎么办。当我把一个
然后在我尝试添加JLabel组件的同一位置调用它的setText()方法

只是一种预感,但除了revalidate()之外,可能还需要调用repaint()


您需要了解更多关于布局及其工作原理的信息。我强烈建议您阅读整个布局管理器教程,因为理解布局是这里的解决方案,而仅仅使用BorderLayout并不是解决这个问题的方法。您可能希望嵌套布局,可能对整个GUI使用BorderLayout,并使用一个中心JPanel use-BoxLayout来允许您将组件堆叠在其中。然后,可能会将此JPanel添加到使用BorderLayout.CENTER位置中的BorderLayout的主JPanel中。

应该自动调用它吗?是的,它应该被调用,但仅适用于布局管理器“认为”脏的区域。您使用的是哪个布局管理器?有可能新组件最终位于其他组件的下方。@PaulTomblin我将布局更改为边框布局,现在我看到它位于其他标签的后面!我将等待一个答案,该答案将建议选择哪种布局如果您只是希望组件堆叠在彼此上方,我将使用BoxLayout,或者为了更简单,将JPanel1替换为一个长方体
    jPanel1.add(new JLabel("Stack Overflow"));
    jPanel1.revalidate();
    jPanel3.revalidate();