6
這與我昨天問過的問題類似,但更具體到問題。 將JFreeChart添加到已包含各種小部件的NetBeans項目的正確方法是什麼? 我的updateChart()隱藏了整個JFrame。 我想將JFreeChart添加到JFrame。如何在NetBeans項目中顯示JFreeChart
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;
}
}
更正代碼:
private void updateChart() {
XYDataset dataset = createXYdataset();
JFreeChart chart = createChart(dataset);
JPanel chartPanel = new ChartPanel(chart);
chartPanel.setSize(jPanel1.getSize());
jPanel1.add(chartPanel);
jPanel1.getParent().validate();
}
NetBeans IDE似乎在爲LayoutManager使用GroupLayout。我在項目中添加了一個名爲jPanel1的JPanel和'jPanel1.add(chartPanel); jPanel1.getParent()驗證()。和jPanel1.setVisible(true);'updateChart()',但圖表在jPanel1中不可見。任何其他想法? – jacknad 2010-10-19 15:56:34
GroupLayout需要使用我一無所知的約束條件。我想問題是空的面板有一個0的首選大小,所以沒有適當設置限制添加另一個組件。我總是手工構建我的GUI佈局,所以我完全控制了佈局。所以我的建議是學習如何使用佈局管理器並自己完成編碼,然後不依賴於IDE。 – camickr 2010-10-19 17:56:28
非常感謝你的線索。它只需要一個'chartPanel.setSize(jPanel1.getSize());'。 – jacknad 2010-10-19 18:11:23