Hallo liebe Kundigen des fröhlichen Codens.
Ich hoffe, Ihr könnt mir helfen, ich selbst kann es leider nicht mehr, da ich mir schon seit fast 2 wochen den kopf über folgendes problem zerbreche.
ich würde gerne einen live-chart programmieren, der mir alle paar sekunden daten aus einer datenbank in den chart schreibt, und dieses grafisch ausgibt.
db-anbindung, und alles andere klappt, jedoch wird bei mir im chart nur der erste datensatz angezeigt, und trotz neuer daten nicht verändert.
auf gut deutsch, das fireChartChanged(); klappt nicht.
ist es möglich, das ich irgendwo einen listener vergessen habe, oder der chart noch einen repaint braucht?
ich hab zwar schon alles mögliche ausprobiert, aber vielleicht hab ich was übersehen..
hier eine abgewandelte klasse des charts
(ja, ich weiß, klassennamen werden groß geschrieben )
habs nur auf die schnelle umgebaut, damit man es leichter testen kann.
für jede hilfe wäre ich echt dankbar.
lg
giftie
Ich hoffe, Ihr könnt mir helfen, ich selbst kann es leider nicht mehr, da ich mir schon seit fast 2 wochen den kopf über folgendes problem zerbreche.
ich würde gerne einen live-chart programmieren, der mir alle paar sekunden daten aus einer datenbank in den chart schreibt, und dieses grafisch ausgibt.
db-anbindung, und alles andere klappt, jedoch wird bei mir im chart nur der erste datensatz angezeigt, und trotz neuer daten nicht verändert.
auf gut deutsch, das fireChartChanged(); klappt nicht.
ist es möglich, das ich irgendwo einen listener vergessen habe, oder der chart noch einen repaint braucht?
ich hab zwar schon alles mögliche ausprobiert, aber vielleicht hab ich was übersehen..
hier eine abgewandelte klasse des charts
Code:
package ausleser;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeListener;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.RefineryUtilities;
public class testchart extends JFrame {
public testchart(){
super("mainTable");
boolean isrunning = true;
int firstRun = 0;
while (isrunning == true)
{
hilfsi++;
System.out.println("mein main hilfsi = " + hilfsi);
try
{
if (firstRun == 0)
{
firstRun = 1;
System.out.println("this.chartErzeugen();");
this.chartErzeugen();
this.initGUI();
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
System.out.println("Charts.this.chartUpdate(); ");
testchart.this.updateChart(createDataset());
}
});
Thread.sleep(2000);
System.out.println("hab gut geschlafen");
}
catch (InterruptedException e)
{
e.getMessage();
}
catch (NullPointerException nullpe){}
catch (ArrayIndexOutOfBoundsException aioobex){}
}
}
JFrame frame = new JFrame();
JFreeChart chart;
int hilfsi = 0;
ChartPanel chartPanel = new ChartPanel(chart);
public testchart(final String title) {
final CategoryDataset dataset = createDataset();
final JFreeChart chart = createChart(dataset);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(500, 270));
}
private CategoryDataset createDataset() {
final String series1 = "Serie 1";
final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
int i = 0;
double j = 0;
double [] data = this.daten();
String [] type = this.typus();
while (i < 50){
dataset.addValue(data[i], series1, type[i]);
i++;
j = j + 1.0;
}
return dataset;
}
double []dataSet = new double[50];
public double [] daten(){
int i = 0;
while(i < 50){
dataSet[i]= hilfsi + hilfsi/2;
hilfsi++;
i++;
System.out.println("mein data hilfsi = " + hilfsi);
}
System.out.println(dataSet[0]);
return dataSet;
}
String []typen = new String[50];
public String [] typus(){
int i = 0;
while(i < 50 ){
typen[i]=String.valueOf(hilfsi + hilfsi/3);
i++;
System.out.println("mein typus hilfsi = " + hilfsi);
System.out.println(typen[0]);
}
return typen;
}
public void chartErzeugen(){
chart = createChart(this.createDataset());
}
public void updateChart(CategoryDataset dataset){
this.createDataset().addChangeListener(this.chart.getCategoryPlot());
dataset.addChangeListener(this.chart.getCategoryPlot());
chart.fireChartChanged();
chartPanel.repaint();
frame.repaint();
}
private JFreeChart createChart(final CategoryDataset dataset) {
final JFreeChart chart = ChartFactory.createLineChart(
"Line Chart Demo 1", // chart title
"Type", // domain axis label
"Value", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips
false // urls
);
chart.setBackgroundPaint(Color.white);
final CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setRangeGridlinePaint(Color.white);
final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setAutoRangeIncludesZero(true);
return chart;
}
public void initGUI(){
chart.setBackgroundPaint(new Color(220,220,220));
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setBackground(Color.lightGray);
chartPanel.setPreferredSize(new java.awt.Dimension(750, 410));
frame.setContentPane(chartPanel);
frame.pack();
RefineryUtilities.centerFrameOnScreen(frame);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(final String[] args) {
testchart testchart = new testchart();
}
}
(ja, ich weiß, klassennamen werden groß geschrieben )
habs nur auf die schnelle umgebaut, damit man es leichter testen kann.
für jede hilfe wäre ich echt dankbar.
lg
giftie