jeudi 22 janvier 2015

JFreeChart neu zeichnen sich Wenn Jtable sich ändert

Hallo Leute,

Ich bin gerade bei einemProjekt und dafür mus ich ein UI implementiere.

Problem:

Ich habe eine JTable die mir Daten anzeigt. Diese Jtable beinhalet zwei Column(Col1 für Zeit und Col2 für Werte von einem CO2 Sensor).

Am Amfang ist die

Mit einem click auf Start Button werde die Daten in der Tabelle mit einer Periode, die ich über den Konsole eingeben kann, hinzugefügt ,

Nach jeder Änderung in der Tabelle von der Koordianten x= Zeit und y=Co2 Werte, muss daraus ein LineChart dynamic dargestellt werden.



Wie kann ich diese Linechart Dynamic darstellen









ich habe versucht 7 Tage und Nächte das zu machen aber leider ohne Erfolg.










Codepublic PanelGraphic() throws NotConnectedException {



initComponents();





}

private static JFreeChart createChart(final XYDataset dataset) {

JFreeChart chart = ChartFactory.createXYLineChart(

"KohlendioxdeTest", "Time ", "CO2 (ppm)", dataset,

PlotOrientation.VERTICAL, false, false, false);

return chart;

}

private void display(){



JFreeChart chart = createChart(dataset);

ChartPanel panel = new ChartPanel(chart);

final XYPlot plot = (XYPlot) chart.getPlot();

panel.setPreferredSize(new java.awt.Dimension(515, 265));

PlGraph.setLayout(new java.awt.BorderLayout());

PlGraph.add(panel, BorderLayout.CENTER);

PlGraph.validate();

}



private void jButtonStartActionPerformed(java.awt.event.ActionEvent evt) {







final DefaultTableModel model = (DefaultTableModel) tbCO2Value.getModel();



try {

if (!txtSetPeriode.getText().trim().isEmpty()) {



double peri = Long.parseLong(txtSetPeriode.getText());

co2.setCO2CallbackPeriod((long) peri * 1000);

co2.addCO2PPMListener(new BrickletCO2.PPmListener() {



@Override

public void PPmconverter(int kohlendioxide) {

model.addRow(new Object[]{DisplayTime.getTime(), String.valueOf(kohlendioxide)});

}

});

} else {

lbComment.setText("Bitte geben sie die Periode ein");

}





} catch (NotConnectedException ex) {

Logger.getLogger(PanelGraphic.class.getName()).log(Level.SEVERE, null, ex);

} catch (TimeoutException ex) {

Logger.getLogger(PanelGraphic.class.getName()).log(Level.SEVERE, null, ex);

}



tbCO2Value.getModel().addTableModelListener(new MyTableModelListener(tbCO2Value));

dataset = new XYSeriesCollection();





XYSeries series = new XYSeries("CO2 (ppm)");

int nRow = tbCO2Value.getRowCount();

int nCol = tbCO2Value.getColumnCount();

Object[][] tableData = new Object[nRow][nCol];

for (int i = 0; i < nRow; i++) {



tableData[i][0] = tbCO2Value.getValueAt(i, 0);

tableData[i][1] = tbCO2Value.getValueAt(i, 1);

// for (int i = 0; i < 10; i++) {

series.add((double) tableData[i][0],(double) tableData[i][1] );

}

dataset.addSeries(series);



display();



}

class MyTableModelListener implements TableModelListener {



JTable table;



private MyTableModelListener(JTable table) {

this.table = table;

}



@Override

public void tableChanged(TableModelEvent e) {



int firstRow = e.getFirstRow();

int lastRow = e.getLastRow();

int index = e.getColumn();



switch (e.getType()) {

case TableModelEvent.INSERT:

int nRow = tbCO2Value.getRowCount();

int nCol = tbCO2Value.getColumnCount();

Object[][] tableData = new Object[nRow][nCol];

for (int i = 0; i < nRow; i++) {



tableData[i][0] = tbCO2Value.getValueAt(i, 0);

tableData[i][1] = tbCO2Value.getValueAt(i, 1);





}







break;



}

}



}

}




Angehängte Grafiken







JFreeChart neu zeichnen sich Wenn Jtable sich ändert

0 commentaires:

Enregistrer un commentaire