【问题标题】:How to add multiple components to a JFrame?如何将多个组件添加到 JFrame?
【发布时间】:2010-11-15 16:58:21
【问题描述】:

我有一个 JFrame

我还有一个 Box 类,它扩展了 Component。 这个盒子类有一个 paint 方法,它可以制作一个填充的矩形。

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

我查看了布局管理器,但我不确定这是我想要的。我想要的只是能够在屏幕上的任何位置制作整个矩形的动画。

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

提前致谢!

【问题讨论】:

  • 代码会很有帮助。听起来您正在覆盖引用或 smth...
  • 以后会做。谢谢。

标签: java swing jframe


【解决方案1】:

你有两个选择。

您可以更改框架的布局:

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

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

另一种选择是按照你所说的去做。 (将面板添加到框架中)

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

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

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

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

【讨论】:

  • 是否有任何布局可以让我简单地添加任意数量的组件,而无需明确选择位置(例如,LEFT、RIGHT 或 CENTER)?
  • 我的另一个选择是添加 1 个组件,并让该组件中的绘制方法绘制我想要的所有矩形。 (而不是让每个矩形都用自己的组件表示)
  • @zucch,FlowLayout 可以让您添加任意数量的组件。
  • @zucch,是的,可以选择覆盖paintComponent() 方法并自己绘制矩形。
  • @zucch。如果是这种情况,那么您将需要使用一个面板并自己自定义绘制它们,或者在没有布局管理器的情况下布局组件 - stackoverflow.com/questions/2820872/…
【解决方案2】:

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

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

【讨论】:

  • 他正在尝试从运行时绘制组件,我看不出 Netbeans GUI 构建器如何提供帮助。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      感谢您的所有回答。

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

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

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

      【讨论】:

      • 注意与javax.swing.Box的冲突。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 2012-05-02
      • 2011-09-13
      • 2013-12-12
      • 1970-01-01
      相关资源
      最近更新 更多