如何将多个组件添加到JFrame?
我有一个JFrame 。
我还有一个扩展Component的Box类。 这个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的面板,将我的组件添加到该面板,它们都会正确显示。