Hallo ich habe folgendes Problem:
Ich habe eine JTable die mir Daten anzeigt. Die Daten der JTable sind in der Klasse ModelTable welche TableModel implementiert.
Die Daten in der Tabelle können sich nun änder. Nach jeder Änderung soll daraus ein neuer LineChar erstellt werden.
Also habe ich einen Klasse geschrieb mit einer Methode die mir ein ChartPanel liefert und das Interface TableModelListener implementiert. Die Methode tableChanged() wird nun auch bei jeder Änderung der Daten aufgerufen.
In der Methode tableChanged() soll das Datenset des Charts neu erstelt werden und dem Chart oder ChartPanel gesagt werden, das es sich geändert hat. Ich weiß aber nicht wie ich ihn das mitteilen soll.
Kann mir da bitte jemand helfen?
Ich habe eine JTable die mir Daten anzeigt. Die Daten der JTable sind in der Klasse ModelTable welche TableModel implementiert.
Die Daten in der Tabelle können sich nun änder. Nach jeder Änderung soll daraus ein neuer LineChar erstellt werden.
Also habe ich einen Klasse geschrieb mit einer Methode die mir ein ChartPanel liefert und das Interface TableModelListener implementiert. Die Methode tableChanged() wird nun auch bei jeder Änderung der Daten aufgerufen.
In der Methode tableChanged() soll das Datenset des Charts neu erstelt werden und dem Chart oder ChartPanel gesagt werden, das es sich geändert hat. Ich weiß aber nicht wie ich ihn das mitteilen soll.
Kann mir da bitte jemand helfen?
Code:
public class ModelChart implements ChartModel, TableModelListener {
private int debug;
private Model model;
private ChartPanel chatPanel = null;
private JFreeChart chart = null;
private LegendTitle legend;
private XYPlot plot;
//private StandardXYItemRenderer renderer;
private XYSeriesCollection dataset;
/**
* @param model
* @param debug
*/
public ModelChart(Model model, int debug) {
//DEBUG
if( debug >= 1 ) { System.out.println("ModelChart#ModelChart -- Konstruktor"); }
this.debug = debug;
this.model = model;
this.model.addTableModelListener(this);
//TODO leeres Datenset erstellen
this.dataset = null;
}
@Override
public ChartPanel getChartPanel() {
//DEBUG
if( debug >= 2 ) { System.out.println("ModelChart#getChartPanel"); }
if( this.chatPanel == null) {
this.chatPanel = new ChartPanel( this.getChart() );
this.chart.addChangeListener(this.chatPanel);
}
return this.chatPanel;
}
private JFreeChart getChart() {
//DEBUG
if( debug >= 2 ) { System.out.println("ModelChart#getChart"); }
if( chart == null ) {
if(this.dataset == null) {
this.dataset = new XYSeriesCollection();
XYSeries series1 = new XYSeries("No Values");
series1.add(1, 1);
series1.add(2, 2);
this.dataset.addSeries(series1);
}
this.chart = ChartFactory.createXYLineChart("No title yet", "I[A]", "t[s]", this.dataset, PlotOrientation.HORIZONTAL, true, true, false);
this.chart.setBackgroundPaint(Color.WHITE);
this.legend = this.chart.getLegend();
this.legend.setBackgroundPaint(Color.BLUE);
this.plot = this.chart.getXYPlot();
this.plot.setBackgroundPaint(Color.LIGHT_GRAY);
this.plot.setAxisOffset(new RectangleInsets( 5, 5, 5, 5 ));
}
return this.chart;
}
private XYSeriesCollection getChartData( List<TableRow> indata ) {
//DEBUG
if( debug >= 2 ) { System.out.println("ModelChart#getChartData"); }
this.model.setStatusText("Erstelle Dut Diagram");
XYSeriesCollection localdataset = new XYSeriesCollection();
Iterator<TableRow> it_indata = indata.iterator();
XYSeries series1 = new XYSeries("DUT" + indata.get(0).getDutNumber() );
while( it_indata.hasNext() ) {
TableRow row = it_indata.next();
series1.add(row.getTime(), row.getCurrent());
}
localdataset.addSeries(series1);
return localdataset;
}
@Override
public void tableChanged(TableModelEvent e) {
//DEBUG
if( debug >= 2 ) { System.out.println("ModelChart#tableChange"); }
this.dataset = this.getChartData( this.model.getSelectedDataList() );
if(this.debug >= 3 ) { System.out.println("ModleChart#tableChanged -- Neues Dataset. chartChanged wir aufgerufen!"); }
this.chatPanel.chartChanged(new ChartChangeEvent(this, this.chart, ChartChangeEventType.NEW_DATASET));
}
}