Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 窗口上有多个JFreeCharts_Java_Swing_Jfreechart - Fatal编程技术网

Java 窗口上有多个JFreeCharts

Java 窗口上有多个JFreeCharts,java,swing,jfreechart,Java,Swing,Jfreechart,我试图在一个窗口中显示多个jfreecharts。显然,对于包含的ChartFrame,这是不可能的,所以我尝试将同一个图表的多个副本添加到一个JFrame中,但没有成功。有什么想法吗 JFrame frame = new JFrame("Chart"); frame.getContentPane().add(new ChartPanel(chart1)); frame.getContentPane().add(new ChartPanel(chart2)); frame.pack(); fra

我试图在一个窗口中显示多个jfreecharts。显然,对于包含的ChartFrame,这是不可能的,所以我尝试将同一个图表的多个副本添加到一个JFrame中,但没有成功。有什么想法吗

JFrame frame = new JFrame("Chart");
frame.getContentPane().add(new ChartPanel(chart1));
frame.getContentPane().add(new ChartPanel(chart2));
frame.pack();
frame.setVisible(true);
使用这段代码,我在JFrame中只得到一个图表

编辑:
我添加了另一个数据集和图表,但它仍然只显示其中一个。

您需要有不同的图表实例。如果使用相同的引用,将显示添加到图表面板的最后一个引用。

您需要有不同的图表实例。如果使用相同的引用,将显示添加到图表面板的最后一个引用。

问题的原因是
frame.getContentPane()的布局。
JFrame
内容窗格中的默认布局-
BorderLayout
。阅读有关
边框布局的更多信息
。 这次手术

frame.getContentPane().add(new ChartPanel(chart));
相等于

frame.getContentPane().add(new ChartPanel(chart), BorderLayout.CENTER);
并将
ChartPanel
添加到内容窗格的中心区域。第二个
ChartPanel
也添加到中心区域。然后将两个组件添加到同一区域,最后添加的一个将隐藏以前添加的所有组件。因此,第二个图表面板隐藏了第一个图表面板

您需要更改
frame.getContentPane()
的布局

您可以使用同一图表创建两个
图表面板
。
尝试将代码更改为

JFrame frame = new JFrame("Chart");
frame.getContentPane().add(new ChartPanel(chart), BorderLayout.WEST);
frame.getContentPane().add(new ChartPanel(chart), BorderLayout.EAST);
frame.pack();
frame.setVisible(true);

它不是用于生产的代码。这只是在框架上显示两个
图表面板的示例。

问题的原因是
框架的布局。getContentPane()
JFrame
内容窗格中的默认布局-
BorderLayout
。阅读有关
边框布局的更多信息
。 这次手术

frame.getContentPane().add(new ChartPanel(chart));
相等于

frame.getContentPane().add(new ChartPanel(chart), BorderLayout.CENTER);
并将
ChartPanel
添加到内容窗格的中心区域。第二个
ChartPanel
也添加到中心区域。然后将两个组件添加到同一区域,最后添加的一个将隐藏以前添加的所有组件。因此,第二个图表面板隐藏了第一个图表面板

您需要更改
frame.getContentPane()
的布局

您可以使用同一图表创建两个
图表面板
。
尝试将代码更改为

JFrame frame = new JFrame("Chart");
frame.getContentPane().add(new ChartPanel(chart), BorderLayout.WEST);
frame.getContentPane().add(new ChartPanel(chart), BorderLayout.EAST);
frame.pack();
frame.setVisible(true);

它不是用于生产的代码。它只是一个示例,在框架上显示两个
图表面板

我添加了另一个图表实例(上面编辑),它仍然只显示一个。我添加了另一个图表实例(上面编辑),它仍然只显示一个。+1用于考虑布局;这里有一个使用
GridLayout
的相关示例。非常感谢,我怀疑这是某种布局问题,但这表明我使用swing;)的次数太少了+1.考虑布局;这里有一个使用
GridLayout
的相关示例。非常感谢,我怀疑这是某种布局问题,但这表明我使用swing;)的次数太少了