这是关于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,然后在之后验证所有Jpanel。
我有点担心这可能与马蒂斯有关,因为我正在使用NetBeans的GUI构建器,它似乎运行在某些暗空魔术上可能会搞砸这一切。
非常感谢您的帮助,我是一名新手程序员,所以这一切都有很长的路要走。
编辑:所以,经过几个小时的搞乱一切后,当我尝试在运行时添加图表时,我听到了一些违反层次结构的内容。我对此并不十分了解。有没有办法在GUI构造函数中实例化我的ChartFrame?我知道在哪里放置代码,但我似乎无法让这个工作,因为图表框架必须有一个图表来实例化。
因此,经过几个可怕的,糟糕的互联网搜索时间后,我发现了问题所在。
事实证明,为了在JPanel中有一个ChartPanel,JPanel必须在BorderLayout中。我以前尝试过几次这样做,但是NetBeans中的默认Swing GUI构建器Matisse似乎不允许在运行时更改已放置组件的布局。
我必须在Matisse设计选项卡中将JPanel设置为BorderLayout,方法是右键单击JPanel并将布局设置为border。马蒂斯出于某种原因决定将面板调整为(0,0),因此必须调整大小。
除此之外,我的代码是正确的。