JFrame中。无法显示多个组件

时间:2013-11-01 18:30:54

标签: java swing layout jframe components

我无法同时显示两个不同的组件。

public class BandViewer
{
   public static void main(String[] args)
   {
      JFrame frame = new JFrame();
      frame.setSize(1000, 800);
      frame.setTitle("band");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      BandComponent component = new BandComponent();
      ConcertBackground component1 = new ConcertBackground();
      frame.add(component);
      frame.add(component1);

      frame.setVisible(true);
   }
}

现在我在这个论坛上看到你可以做一些事情同时展示,但却无法弄清楚它是如何完成的。有人可以帮忙吗?我希望有一个在另一个面前。他们是否有某种方法来控制分层?提前致谢。

2 个答案:

答案 0 :(得分:1)

JFrame内,布局管理器通常用于定位不同的组件,教程here

类似的东西:

Container contentPane = frame.getContentPane();
contentPane.setLayout(new FlowLayout());

JFrame设置基本布局管理器。还有JLayeredPane允许您指定z顺序 - docs page,所以类似于:

JLayeredPane layeredPane = new JLayeredPane();

BandComponent component = new BandComponent();
ConcertBackground component1 = new ConcertBackground();
layeredPane.add(component, 0); // 0 to display underneath component1
layeredPane.add(component1, 1);

contentPane.add(layeredPane);

以这种方式设置显示层次结构,对象包含对象。我不确定BandComponentConcertBackground类是什么,但是如果它们继承自Swing类,则可能需要设置首选大小或类似值以确保它们没有零大小!

答案 1 :(得分:1)

您遇到的问题是因为JFrame默认使用BorderLayoutBorderLayout仅允许单个组件出现在其五个可用位置中的任何一个位置。

要将多个组件添加到单个容器,您需要配置布局或使用更符合您需求的布局......

查看A Visual Guide to Layout Managers了解更多示例