jFreeChart in eine NetBeans Projekt integrieren

Rol

Aktives Mitglied
Hallo,

ich habe eine Netbeans Projekt mit einem GUI. Nun möchte ich an einer Stelle der oberfläche ein Balkendiagram darstellen. Jetzt ist dort erstmal nur eine JPanel als Platzhalter.

Ich würde das Balkendiagram gern mit jFreeChart erstellen. Ein Beispiel von dem aus ich mich rantasten könnte wäre hier: JFreeChart: Bar Chart Demo : Bar ChartChartJava

Jetzt habe ich aber keinen blassen Schimmer, wie ich das Diagramm auf meine Oberflächen (auf / in mein JPanel oder ???) bringe.

Gruß
Rol
 
Geht es jetzt um den GUI-Code oder wie du das Diagramm in Netbeans über die Oberfläche einfügen kannst?

Wenn Nr. 2 zutrifft und du keine Oberfläche ohne Netbeans schreiben kannst, würde ich empfehlen dies zu lernen.

Wenn Nr. 1 zutrifft, dann musst du ein Object von der Klasse Chart erstellen und dieses über add dem panel hinzufügen
 
Ihn interessiert, ob du mit einer GUI auch ohne Editor arbeiten kannst. Falls nein, solltest du einen Schritt nach dem anderen machen und dich erstmal in GUI-Programmierung einarbeiten.
 
grundsätzlich gebe ich meinen Vorrednern recht...aber^^ spass macht es aber mehr, wenn man einfach loscodet.

Hast du denn die JCommon.jar und JFreeChart.jar deinem Projekt hinzugefügt?
 
> Hast du denn die JCommon.jar und JFreeChart.jar deinem Projekt hinzugefügt?

Ja. habe ich.
Ich habe auch schon GUI's per Hand erstellt. Hier wollte ich aber eigentlich den GUI Builder benutzen. Das Projekt ist nicht besonders klar definiert, d.h. während des Entwickelns ändern sich Teile der Aufgabenstellung immer wieder und damit z.T. auch das GUI. Da hat man mit den Builder schnell mal ein Element rein geklickt oder verändert.
 
und wo ist dein problem?
Wenn Nr. 1 zutrifft, dann musst du ein Object von der Klasse Chart erstellen und dieses über add dem panel hinzufügen

Java:
final CategoryDataset dataset = createDataset();
        final JFreeChart chart = createChart(dataset);
        
       deinPanel.add(chart);

entweder übernimmst du dann die Methoden aus dem Bsp 1:1, oder änderst es nach deinen wünschen ab...
 
Java:
final CategoryDataset dataset = createDataset();
        final JFreeChart chart = createChart(dataset);
        
       deinPanel.add(chart);

Das dachte ich auch, aber dann kommt der Fehler:

cannot find symbol
symbol: method add(org.jfree.chart.JFreeChart)
location: class javax.swing.JPanel
 
Ja, u.a. ist:
jcommon-1.0.16.jar
jfreechart-1.0.13.jar
geadded.

Ein Test-Chart kann ich auch erzeugen, in ein Image schreiben und diese Image in ein jLabel schreiben:
Java:
PieDataset dataset = createDataset();
JFreeChart chart = createChart(dataset, "foo");
BufferedImage image = chart.createBufferedImage(jLabel1.getWidth(),jLabel1.getHeight());
jLabel1.setIcon(new ImageIcon(image));

Ist zum Testen ein Kuchen, aber das ist ja egal.

Warum kann ich den Chart nicht an ein jPanel adden?
 
habe ich auch schon versucht:

Java:
        PieDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset, "foo");

        ChartPanel chartPanel = new ChartPanel(chart);
        jPanel4.add(chartPanel);

Es wird kein Chart auf dem jPanel4 angezeigt :-(
 
GroupLayout, brauche ich einen anderen?

Java:
        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 325, Short.MAX_VALUE)
        );
        jPanel4Layout.setVerticalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 161, Short.MAX_VALUE)
        );
 
Also ich adde meine JFreeCharts einfach mit
Java:
meinPanel.add(chart);

In meinem Beispiel habe ich aber ein null Layout verwendet und die Position mit setBounds gesetzt.
 
@Rol: das sollte auch mit dem GroupLayout gehen, setze einfach mal eine preferedSize(Dimension)
@Jens81: bezweifel ich, wenn du wissen willst wieso, lese Post #11
 
Tomate Salat hat Recht...mein Post war auch falsch, aber ohne eine IDE ist es manchmal etwas schwierig^^

ich dachte auch das JFreeChart direkt von Component erbt, bzw zumindest von JPanel...aber dafür braucht man das ChartPanel, shame on me 🙁
 
Ich mache es schon so, wie ich geschrieben habe. Aber hab gerade gesehen, dass ich meine eigene ChartKlasse von JPanel ableite.

Java:
public class ChartAlterspyramide extends JPanel {
//...

Sorry
 
Java:
        PieDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset, "foo");
        ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new Dimension(200,200));
        jPanel4.add(chartPanel);

Der Chart wird mit GroupLayout nicht angezeigt, mit BorderLayout schon.
 
Jou wenns mit BorderLayout läuft ists ja gut 🙂. Ich arbeite nie mit GroupLayout, dachte das würde gehen mit der prefSize :-/.
 
Jetzt habe ich noch ein Problem:

Die Daten welche dem Chart zugrunde liegen ändern sich zur Laufzeit und dann soll sich natürlich auch der Chart ändern.

Ich habe als ersten Ansatz mal folgendes versucht:

Wenn sich die Daten geändert haben wird folgendes aufgerufen:
Java:
dataset = createDataset();
chart = createChart(dataset);
meinPanel.repaint();

Leider pssiert gar nichts.
 
Was soll den passieren? hast du Daten überhaupt geändert?

Unser alter guter Freund die Api hat gesagt.:
The panel registers with the chart to receive notification of changes to any component of the chart. The chart is redrawn automatically whenever this notification is received.
das ChartPanel sollte automatisch merken, wenn änderungen vorliegen und zeichnet sich dann neu.
 
meine anzuzeigenden Daten befinden sich in einem arry namens "milliPipHisto".
So lade ich sie in ein dataset:

Java:
    private CategoryDataset createDataset() {
        // create the dataset...
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        DecimalFormat df = new DecimalFormat("0.00");
        for (int i = 0; i < milliPipHisto.length; i++) {
            dataset.addValue((milliPipHisto[i] / 1000000f), "", String.valueOf(i));
        }
        return dataset;
    }

Damit sich der Chart automatisch bei änderung des array "milliPipHisto" ändert müßte ich das wahrscheinlich anders machen... aber wie?
 

Neue Themen


Zurück
Oben