Frage von Dieter987, 28

Diagrammwerte einlesen in Java?

Guten Tag, ich habe ein Diagramm mit Hilfe von jfreechart erstellt: Nun würde ich gern die Werte für das Diagramm über die Konsole eingeben. Wie kann man das am besten realisieren?

import org.jfree.chart.*;
import java.awt.Dimension;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class BarChart extends ApplicationFrame {

public BarChart(String title) {
super(title);
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(12.0, "Row 1", "Column 1");
dataset.addValue(5.0, "Row 1", "Column 2");
dataset.addValue(3.0, "Row 1", "Column 3");
dataset.addValue(2.0, "Row 2", "Column 1");
dataset.addValue(4.0, "Row 2", "Column 2");
dataset.addValue(2.0, "Row 2", "Column 3");
JFreeChart chart = ChartFactory.createBarChart(
"Balkendiagramm", // chart title
"X", // domain axis label
"Y", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips
false // URLs
);
ChartPanel chartPanel = new ChartPanel(chart, false);
chartPanel.setPreferredSize(new Dimension(1000, 800));
setContentPane(chartPanel);
}

public static void main(String[] args) {
BarChart demo = new BarChart("");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
Expertenantwort
von KnusperPudding, Community-Experte für Java, 12

Erstelle dir erstmal eine Klasse, die du mit den entsprechenden Informationen anreichern kannst.

z.b. mit der Bezeichnung: ChartData. Die Klasse bekommt die Eigenschaften: 

double value;
String row;
String column;

Wenn du eine IDE nutzt solltest du per Codevervollständigung entsprechende Getter-Methoden sowie einen Konstruktor der alle 3 Parameter entgegen nimmt implementieren.

Eine Liste von Chart-Data könntest du dann deiner Klasse als Parameter übergeben (wozu du natürlich den Konstruktor deiner Klasse darum erweitern solltest).

Sodass du dann folgendes machen kannst:

List<ChartData> listData = new ArrayList<>();
listData.add(new ChartData(1.0, "Row 1", "Column 1");
...

BarDemo barDemo = new BarDemo("", listData);
...
Kommentar von KnusperPudding ,

Anstatt:

dataset.addValue(12.0, "Row 1", "Column 1");

schreibst du natürlich:

for (ChartData chartData : listData) {
dataset.addValue(chartData.getValue(), chartData.getRow(), chartData.getColumn());
}
Kommentar von Dieter987 ,

Habe bisher folgendes: http://www.paste.org/81083

Erhalte eine Fehlermeldung bei:

import org.jfree.chart.demo.BarDemo;

cannot be resolved 

Kommentar von KnusperPudding ,

cannot be resolved 

heißt, dass du die Library zu deinem Projekt hinzufügen musst.

Keine passende Antwort gefunden?

Fragen Sie die Community