如何将2个JFrame添加到单个JPanel?

时间:2014-03-25 14:18:42

标签: java swing jframe jpanel

我有两个代表条形图的框架。 valueFrame是整数的输入文本框。 barFrame是与valueFrame对应的条形图。

我想把这两个单独的帧并排放入1个JPanel中。因此,当程序运行时,我看到1个JPanel内部有2个帧。当我尝试添加帧时,我得到一个IllegalArgumentException。谁能告诉我如何正确地做到这一点?

public static void main(String[] args) {
    // TODO code application logic here
    ArrayList<Double> data = new ArrayList<Double>();

  data.add(new Double(33.0));
  data.add(new Double(44.0));
  data.add(new Double(22.0));
  data.add(new Double(22.0));

 Model model = new Model(data);

 View1 valueFrame = new View1(model);

  View2 barFrame = new View2(model);

  model.attach(barFrame);

  JPanel mainPanel = new JPanel();
  mainPanel.setSize(600,400);
  mainPanel.setLayout(new BorderLayout());
  mainPanel.add(valueFrame,BorderLayout.WEST);//IllegalArgumentException
  mainPanel.add(barFrame,BorderLayout.EAST);//IllegalArgumentException
  mainPanel.setVisible(true);
}

}

Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a     container
at java.awt.Container.checkNotAWindow(Container.java:488)
at java.awt.Container.addImpl(Container.java:1089)
at java.awt.Container.add(Container.java:971)
at Ales6_7.Ales6_7.main(Ales6_7.java:43)
BUILD SUCCESSFUL (total time: 4 seconds)

2 个答案:

答案 0 :(得分:3)

您无法在JFrame消息中添加JPanel,这是不言自明的,您可以查看JInternalFrame

  

使用JInternalFrame类,您可以显示类似JFrame的窗口   在另一个窗口内。通常,您将内部框架添加到桌面   窗格。反过来,桌面窗格可以用作内容窗格   一个JFrame。桌面窗格是JDesktopPane的一个实例,它是一个   JLayeredPane的子类,它添加了用于管理多个API的API   内部框架重叠。

了解详情:How to use InternalFrames

答案 1 :(得分:1)

如果您想并排两个框架,请为JFrame添加两个布局(看起来您的JFrame已经在使用BorderLayout,所以从技术上讲,您可以将这两个新布局添加到{{1}如果您想获得目前正在努力实现的外观,请分别在东西方{}} {/ p}}。

有关布局的更多信息http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html