首页 > 解决方案 > 我无法让 ChartPanel 出现在现有的 jPanel 中。这和马蒂斯有关系吗?

问题描述

这是我关于 Stack Overflow 的第一个问题,对于描述问题时的任何错误,我深表歉意,因此请随时要求更多或不同的描述。

我正在使用 jFreeChart API 制作一个程序,我试图通过创建 ChartPanel 并在每次进行编辑时刷新其中的图表来允许实时编辑显示的图表。

public void displayChart(JFreeChart chart) {
    ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setDomainZoomable(true);
    chartPanel.setVisible(true);
    jPanel3.add(chartPanel, BorderLayout.CENTER);
    jPanel3.setLayout(new java.awt.BorderLayout());
    jPanel3.validate();
}

private void ChartSelectionActionPerformed(java.awt.event.ActionEvent evt) {                                               
    String selection;
    selection = ChartSelection.getActionCommand();
    if (selection == "S/D") {
    Chart Chart = new Chart();
    JFreeChart chart = Chart.generateSandDBase();
    displayChart(chart);
    } else {

    }
}                                              

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    Series Series = new Series();
    Chart Chart = new Chart();
    XYSeries supply = Series.getSupplySeries();
    double tempX;
    double tempY;
    for (int i = 0; i < 10; i++) {
        tempX = (double) supply.getX(i);
        tempX = tempX + 1;
        tempY = (double) supply.getY(i);
        supply.remove(i);
        supply.add(tempX, tempY);
        System.out.println(supply.getX(i).toString());
        System.out.println(supply.getY(i).toString());
    }
    Series.setSupplySeries(supply);
    JFreeChart chart = Chart.generateSandD(supply, Series.getDemandSeries());
    displayChart(chart);
}                   

我发现有人问过类似的问题,但我发现的所有解决方案都没有解决这个问题。在运行时,图表根本不会出现在面板中。我尝试在现有面板中添加一个新面板,然后在其中添加 ChartPanel。我尝试验证整个 JFrame,并在添加我的 ChartPanel 之前擦洗 Jpanel,然后在此之后验证所有内容。

我有点担心这可能与马蒂斯有关,因为我正在使用 NetBeans 的 GUI 构建器,它似乎运行在一些可能会搞砸这一切的黑暗空间魔法上。

非常感谢您的帮助,我是一名新手程序员,所以这一切都很顺利。

编辑: 因此,经过几个小时的处理,当我尝试在运行时添加图表时,我听到了一些关于违反层次结构的信息。我对此了解不多。有没有办法让我在 GUI 构造函数中实例化我的 ChartFrame?我知道将代码放在哪里,但我似乎无法让它工作,因为图表框架必须有一个要实例化的图表。

标签: javajpaneljfreechartmatissechartpanel

解决方案


因此,在互联网上搜索了几个可怕、可怕的小时后,我发现了问题所在。

事实证明,为了在 JPanel 中有 ChartPanel,JPanel 必须在 BorderLayout 中。我之前已经尝试过几次,但是 NetBeans 中默认的 Swing GUI 构建器 Matisse 似乎不允许在运行时更改放置组件的布局。

我必须在 Matisse 设计选项卡中将 JPanel 设置为 BorderLayout,方法是右键单击 JPanel 并将布局设置为边框。Matisse 出于某种原因决定将面板的大小调整为 (0,0),因此也必须调整其大小。

除此之外,我的代码是正确的。


推荐阅读