如何将多个组件添加到JFrame?

我有一个JFrame

我还有一个扩展ComponentBox类。 这个box类有一个paint方法,它可以生成一个填充的矩形。

当我将多个这些Box组件添加到我的JFrame时,当我在JFrame上调用repaint时,只显示最近添加的一个。

我看了一下布局管理器,但我不确定这是我想要的。 我想要的就是能够在屏幕上的任何地方制作一大堆矩形的动画。

(我也尝试创建一个面板,将面板添加到JFrame,然后将所有Box组件添加到面板。这也不起作用)。

提前致谢!

你有2个选择。

您可以更改框架的布局:

JFrame frame; frame.setLayout(new FlowLayout()); 

现在,如果添加多个框,它将显示在框架上。

另一种选择是做你说过的尝试。 (将面板添加到框架中)

 JPanel pane = new JPanel(); frame.add(pane); (add the boxes to 'pane') 

另外,你应该小心你的Box的大小。 你可能想要在创建Box某个地方调用setPreferredSize() 。 这将告诉Java在添加到布局时框的大小。

您还应该查看Java布局管理器教程 。 那里有很多很棒的信息。

还有一件事。 原因是框架上一次只显示一个框是因为JFrame的布局管理器是BorderLayout 。 并且,当您在具有BorderLayout的组件上调用add时,该组件会自动添加到组件的中心。 后续调用add将覆盖中心组件,中间只留下一个组件。

您可以将框架布局设置为null ,然后使用setBounds()将框准确定位到所需的位置。

您需要查看其他布局管理器。 默认情况下,JFrame使用BorderLayout并且未指定添加组件的“地点”,它们将添加到CENTER。 取决于您希望UI的外观取决于要使用的布局管理器。 我建议也许使用Netbeans GUI builder。

编辑:错过了关于你要添加的内容的部分,但概念仍然相同,如果你只是将这些组件添加到默认布局管理器,它们将被覆盖。 听起来你可能需要在你的一个Box组件中进行绘画,或者创建一个JPanel并将布局设置为null ,然后你必须明确地放置它们。 真的取决于你想要用它做什么。

首先在纸上进行布局,然后在Swing布局管理器上阅读。

请注意,某些Swing组件只允许将一个组件添加到它们中。 我在使用Tabbed窗格时遇到过这个问题。 每个选项卡只能接受一个控件(JPane?),因此您必须创建一个单独的面板,其中布局用于排列相关控件,然后作为一个单元将窗格添加到选项卡。 Swing库中有类似的安排。

谢谢你的所有答案。

由于我使用自己的自定义类Box ,我可以通过paint方法设置矩形的位置。

我意识到我的Box类正在扩展错误的东西。 它应该一直在扩展javax.swing.Jcomponent。

如果我现在使用具有OverlayLayout的面板,将我的组件添加到该面板,它们都会正确显示。