2010-10-19 82 views
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(); 
} 

回答

8

我updateChart()隱藏整個 JFrame中。

JFreeChart chart = createChart(dataset); 
JPanel chartPanel = new ChartPanel(chart); 
setContentPane(chartPanel); 

那將是因爲你從免費應用排行榜的面板更換你的幀的內容窗格中。

我不知道你在用什麼佈局管理器,但是你需要將免費圖表面板「添加」到包含所有其他組件的面板。因此,也許當你在Netbeans中設計一般表格時,你會在你想要添加免費圖表面板的地方添加一個空面板。然後,當你添加免費的圖表面板的代碼會是這樣的:

emptyFreeChartPanel.add(chartPanel); 
emptyFreeChartPanel.getParent().validate(); 

的驗證告訴擺動組件是否已加入這樣的佈局管理器將被調用。

+0

NetBeans IDE似乎在爲LayoutManager使用GroupLayout。我在項目中添加了一個名爲jPanel1的JPanel和'jPanel1.add(chartPanel); jPanel1.getParent()驗證()。和jPanel1.setVisible(true);'updateChart()',但圖表在jPanel1中不可見。任何其他想法? – jacknad 2010-10-19 15:56:34

+2

GroupLayout需要使用我一無所知的約束條件。我想問題是空的面板有一個0的首選大小,所以沒有適當設置限制添加另一個組件。我總是手工構建我的GUI佈局,所以我完全控制了佈局。所以我的建議是學習如何使用佈局管理器並自己完成編碼,然後不依賴於IDE。 – camickr 2010-10-19 17:56:28

+2

非常感謝你的線索。它只需要一個'chartPanel.setSize(jPanel1.getSize());'。 – jacknad 2010-10-19 18:11:23

相關問題