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

时间:2010-11-15 16:58:22

标签: java swing jframe

我有一个 JFrame

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

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

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

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

提前致谢!

5 个答案:

答案 0 :(得分:10)

你有2个选择。

您可以更改框架的布局:

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

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

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

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

另外,您应该注意Box的大小。您可能希望在创建setPreferredSize()时在某处调用Box。这将告诉Java在将其添加到布局时,该框的大小。

您还应该查看Java Layout Manager Tutorials。那里有很多很棒的信息。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

感谢您的所有答案。

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

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

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