2010-10-19 7 views
6

Jest to podobne do pytania, które zadałem wczoraj, ale bardziej szczegółowe na temat problemu. Jaka jest poprawna metoda dodawania JFreeChart do projektu NetBeans, który zawiera już różne widżety? Moja aktualizacjaChart() ukrywa całą ramkę JFrame. Chciałbym dodać JFreeChart do JFrame.Jak wyświetlić JFreeChart w projekcie 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; 
    } 
} 

Poprawiono kod:

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

Odpowiedz

8

Moja updateChart() ukrywa całą JFrame.

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

To byłoby ponieważ wymieniasz okienko z treścią ramki z panelem z bezpłatnego wykresu.

Nie wiem, jakiego menedżera układu używasz, ale musisz "DODAĆ" panel bezpłatnego wykresu do panelu zawierającego wszystkie pozostałe komponenty. Więc może kiedy projektujesz ogólny formularz w Netbeans, dodajesz pusty panel do miejsca, w którym chcesz dodać bezpłatny panel wykresu. Następnie po dodaniu swobodny panel wykresu kod byłoby coś jak:

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

validate Swing mówi, że składniki zostały dodane więc menedżer układ zostanie wywołany.

+0

IDE NetBeans wydaje się używać GroupLayout dla LayoutManager. Dodałem JPanel o nazwie jPanel1 do projektu i 'jPanel1.add (chartPanel); jPanel1.getParent(). validate(); i jPanel1.setVisible (true); 'to' updateChart() ', ale wykres nie jest widoczny w jPanel1. Jakieś inne pomysły? – jacknad

+2

GroupLayout wymaga użycia ograniczeń, o których nic nie wiem. Domyślam się, że problem polega na tym, że pusty panel ma preferowany rozmiar 0, więc ograniczenia nie są ustawione poprawnie, aby dodać do niego inny komponent. Zawsze układam swoje układy GUI ręcznie, więc mam pełną kontrolę nad układem. Tak więc moją sugestią byłoby nauczenie się korzystania z menedżerów układu i samodzielne kodowanie, a nie jesteś zależny od IDE. – camickr

+2

Dzięki za wiadomość. Wszystko, czego potrzebował, to 'chartPanel.setSize (jPanel1.getSize());'. – jacknad