我有一个 JFrame 。
我还有一个 Box 类,它扩展了组件。 这个box类有一个 paint 方法,它可以生成一个填充的矩形。
当我将多个Box组件添加到我的JFrame时,当我在JFrame上调用 repaint 时,只会显示最近添加的一个。
我看了一下布局管理器,但我不确定这是我想要的。我想要的就是能够在屏幕上的任何地方制作一大堆矩形动画。
(我也尝试创建一个面板,将面板添加到JFrame,然后将所有Box组件添加到面板中。这也不起作用。)
提前致谢!
答案 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的面板,将我的组件添加到该面板,它们都会正确显示。