Java 如何在NetBeans项目中显示JFreeChart
这类似于我昨天问的一个问题,但更具体的问题。 向已经包含各种小部件的NetBeans项目添加JFreeChart的正确方法是什么? 我的updateChart()隐藏了整个JFrame。 我想将JFreeChart添加到JFrameJava 如何在NetBeans项目中显示JFreeChart,java,swing,netbeans,jfreechart,Java,Swing,Netbeans,Jfreechart,这类似于我昨天问的一个问题,但更具体的问题。 向已经包含各种小部件的NetBeans项目添加JFreeChart的正确方法是什么? 我的updateChart()隐藏了整个JFrame。 我想将JFreeChart添加到JFrame public class MyClass extends javax.swing.JFrame implements TableModelListener { public MyClass() { initComponents();
public class MyClass extends javax.swing.JFrame implements TableModelListener {
public MyClass() {
initComponents();
...
updateChart();
}
private void updateChart() {
XYDataset dataset = createXYdataset();
JFreeChart chart = createChart(dataset);
JPanel chartPanel = new ChartPanel(chart);
setContentPane(chartPanel);
}
private XYDataset createXYdataset() {
XYSeries series = new XYSeries("");
int rows = jTable.getRowCount();
if (rows > 0) {
int ms = 0;
for (int row = 0; row < rows; row++) {
series.add(ms, 1);
ms += Integer.parseInt(
jTable.getValueAt(row, PULSE_ON).toString());
series.add(ms, 1);
series.add(ms, 0);
ms += Integer.parseInt(
jTable.getValueAt(row, PULSE_OFF).toString());
series.add(ms, 0);
}
}
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
return dataset;
}
private JFreeChart createChart(XYDataset dataset) {
JFreeChart chart = ChartFactory.createXYLineChart(
null, // chart title
"ms", // x axis label
null, // y axis label
dataset, // data
PlotOrientation.VERTICAL,
false, // include legend
true, // tooltips
false // urls
);
XYPlot plot = (XYPlot) chart.getPlot();
plot.setDomainPannable(true);
plot.setRangePannable(true);
plot.setRangeGridlinesVisible(false);
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
return chart;
}
}
我的updateChart()隐藏了整个
JFrame
这是因为您正在用“免费图表”中的面板替换框架的内容窗格
我不知道您使用的是什么布局管理器,但是您需要“添加”自由图表面板到包含所有其他组件的面板中。因此,当您在Netbeans中设计通用表单时,可能会在希望添加免费图表面板的位置添加一个空面板。然后,当您添加“免费图表”面板时,代码如下所示:
emptyFreeChartPanel.add( chartPanel );
emptyFreeChartPanel.getParent().validate();
validate告诉Swing已添加组件,因此将调用布局管理器。NetBeans IDE似乎正在为布局管理器使用GroupLayout。我在项目中添加了一个名为jPanel1的JPanel和
jPanel1.add(chartPanel);jPanel1.getParent().validate();和jPanel1.setVisible(true)代码>到updateChart()
但图表在jPanel1中不可见。还有其他想法吗?GroupLayout需要使用我一无所知的约束。我想问题是,空面板的首选尺寸为0,因此没有正确设置约束,无法向其中添加其他组件。我总是手工构建我的GUI布局,所以我完全控制布局。所以我的建议是学习如何使用布局管理器,自己编写代码,这样你就不必依赖IDE了。非常感谢你提供的线索。它所需要的只是一个chartPanel.setSize(jPanel1.getSize())代码>。
JFreeChart chart = createChart(dataset);
JPanel chartPanel = new ChartPanel(chart);
setContentPane(chartPanel);
emptyFreeChartPanel.add( chartPanel );
emptyFreeChartPanel.getParent().validate();