2010-10-19 81 views
6

Điều này tương tự như câu hỏi tôi đã hỏi hôm qua nhưng cụ thể hơn cho vấn đề. Phương pháp chính xác để thêm JFreeChart vào dự án NetBeans đã chứa nhiều tiện ích con khác nhau là gì? Bản cập nhật của tôiChart() ẩn toàn bộ JFrame. Tôi muốn thêm JFreeChart vào JFrame.Cách hiển thị JFreeChart trong dự án NetBeans

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; 
    } 
} 

đang Corrected:

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(); 
} 

Trả lời

8

updateChart của tôi() ẩn toàn bộ JFrame.

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

Đó sẽ là bởi vì bạn đang thay thế các khung nội dung của khung hình của bạn với bảng từ biểu đồ miễn phí.

Tôi không biết bạn đang sử dụng trình quản lý bố cục nào, nhưng bạn cần "ADD" bảng biểu đồ miễn phí vào bảng chứa tất cả các thành phần khác. Vì vậy, có thể khi bạn thiết kế biểu mẫu chung trong Netbeans, bạn thêm bảng trống vào vị trí bạn muốn bảng biểu đồ miễn phí được thêm vào. Sau đó, khi bạn thêm bảng biểu đồ miễn phí, mã sẽ có dạng như sau:

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

Xác nhận hợp lệ cho Swing rằng các thành phần đã được thêm để trình quản lý bố cục sẽ được gọi.

+0

IDE NetBeans dường như đang sử dụng GroupLayout cho Trình quản lý bố cục. Tôi đã thêm một JPanel gọi là jPanel1 vào dự án và 'jPanel1.add (chartPanel); jPanel1.getParent(). validate(); và jPanel1.setVisible (true); 'to' updateChart() 'nhưng biểu đồ không hiển thị trong jPanel1. Bất kỳ ý tưởng nào khác? – jacknad

+2

GroupLayout yêu cầu sử dụng các ràng buộc mà tôi không biết gì về. Tôi đoán vấn đề là bảng điều khiển trống có kích thước 0 được ưa thích nên các đường viền không được đặt đúng để thêm thành phần khác vào nó. Tôi luôn xây dựng bố cục GUI bằng tay để tôi có toàn quyền kiểm soát bố cục. Vì vậy, đề xuất của tôi sẽ là tìm hiểu cách sử dụng trình quản lý bố cục và tự viết mã thì bạn không phụ thuộc vào IDE. – camickr

+2

Cảm ơn một triệu đầu mối. Tất cả những gì cần thiết là một 'chartPanel.setSize (jPanel1.getSize());'. – jacknad

Các vấn đề liên quan