使用JFreeChart切换的CardLayout无法正常工作

时间:2012-11-03 11:15:48

标签: java swing jfreechart

我遇到了JFreeChart的一些问题,在这里我解释了我正在创建的内容:Random errors when changing series using JFreeChart。但现在我有另一个相关的问题。当我点击选项卡式窗格时,我必须在ChartPanelCardLayout来切换图表。我已经尝试了普通的JPanelpublic class JPaintablePanel extends JPanel。它显示了一些具有不同名称的按钮,具体取决于标签),并且效果很好。但public class JPaintablePanel extends ChartPanel同样的事情不起作用,它只显示一个图表。你能告诉我如何强制ChartPanel切换和保存数据吗?

http://pastebin.com/THuvGan5 ChartPanel

http://pastebin.com/Br2swZiC CardLayout

2 个答案:

答案 0 :(得分:1)

您无需混合选项卡式窗格和卡布局。只需在每个标签中单独添加ChartPanel

JTabbedPane tabs = new JTabbedPane();
tabs.add("Graph 1", new JPrintablePanel());
tabs.add("Graph 2", new JPrintablePanel());

您不必编写任何代码来处理切换标签,Swing会为您处理。如果您添加数据,ChartPanels也会自动更新。

答案 1 :(得分:1)

  

对不起,我没有说清楚:JTabbedPaneChartPanelJPanel位于同一网格上。

您的问题并不清楚,但让收容层次结构反映预期用途可能会有所帮助。如果每张卡都要包含三个面板,请让每个CardPanel包含三个相应的字段。传递CardPanel构造函数中的所有必需参数。将这些卡片的实例添加到CardLayout,如找到的示例herehere所示。使用strategy pattern为单个卡提供通用接口的特定实现。

public class CardPanel extends JPanel {

    private JTabbedPane tabPane;
    private ChartPanel chart;
    private JPanel panel;

    public CardPanel(Dataset dataset, Context context, ...) {
        super(new GridLayout(0, 1));
        // initialize fields ...
        this.add(tabs);
        this.add(chart);
        this.add(panel);
    }
    ...
}