窗口上有多个JFreeCharts

时间:2012-08-15 17:53:58

标签: 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();
frame.setVisible(true);

使用此代码,我只能在JFrame中获得一个图表。

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

2 个答案:

答案 0 :(得分:5)

问题的原因是frame.getContentPane()的布局。 JFrame内容窗格中的默认布局 - BorderLayout。详细了解BorderLayout here。 这个操作

frame.getContentPane().add(new ChartPanel(chart));

等于

frame.getContentPane().add(new ChartPanel(chart), BorderLayout.CENTER);

并将ChartPanel添加到内容窗格的CENTER区域。第二个ChartPanel您也会添加到CENTER区域。然后将两个组件添加到同一区域,最后添加的组件隐藏所有先前添加的组件。因此,第二个ChartPanel隐藏了第一个。

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

您可以将同一图表用于两个ChartPanel。 尝试将代码更改为

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);

这不是生产代码。这只是在框架上显示两个ChartPanel的示例。

答案 1 :(得分:1)

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