我有两个代表条形图的框架。 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)
答案 0 :(得分:3)
您无法在JFrame
消息中添加JPanel
,这是不言自明的,您可以查看JInternalFrame
。
使用JInternalFrame类,您可以显示类似JFrame的窗口 在另一个窗口内。通常,您将内部框架添加到桌面 窗格。反过来,桌面窗格可以用作内容窗格 一个JFrame。桌面窗格是JDesktopPane的一个实例,它是一个 JLayeredPane的子类,它添加了用于管理多个API的API 内部框架重叠。
答案 1 :(得分:1)
如果您想并排两个框架,请为JFrame
添加两个布局(看起来您的JFrame已经在使用BorderLayout
,所以从技术上讲,您可以将这两个新布局添加到{{1}如果您想获得目前正在努力实现的外观,请分别在东西方{}} {/ p}}。
有关布局的更多信息http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html