AWT JFreeChart in ein Label

S

Sakulrelda

Gast
Hallo Ihr,

ich habe eine Klasse, die zur Erstellung eines Diagramms dient.

Dieses Diagramm soll später in einem Label auf meinem MainFrame erscheinen.
Ich frage mich, wie ich das Diagramm implementiert bekomme...


Java:
public class DiagrammClass extends JFrame {

	public XYSeries s1;
	public XYSeries s2;
	public XYSeries s3;
	public XYSeriesCollection dataset;
	public JFreeChart chart;
	private static final long serialVersionUID = 1L;
	
	/**
	 * 
	 * Erzeugt ein Objekt der Klasse DiagrammClass
	 * 
	 * @param title 
	 * @Konstruktor Konstruktor der Klasse
	 */
	public DiagrammClass(String title) {
		super(title);
	}
	
	public void closeOperation(){
		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosed(java.awt.event.WindowEvent evt) {
                formWindowClosed(evt);
            }
          }
        );
	}
        
    public void formWindowClosed(WindowEvent evt){
    	// Auswahlfelder JA oder NEIN
    			Object[] options = { "Ja", "Nein" };

    			// Speichert das Case
    			int wahl;
    			// Initialisiert das Option Dialog
    			wahl = JOptionPane.showOptionDialog(this,
    					"Möchten Sie das Programm beenden?", "",
    					JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
    					null, options, null);

    			// Wenn Wahl auf 0 gesetzt ist, dann...
    			if (wahl == 0) {
    				// Beenden des Programms
    				System.exit(10);
    			} else {
    				setDefaultCloseOperation(MainFrames.DO_NOTHING_ON_CLOSE);
    			}
    }

	/**
	 * Startet die Erstellung des Diagramms
	 * 
	 * @param daten
	 * @param count
	 */
	public void aktualisieren( String[][] daten, int count){
		JPanel chartPanel = diaErstellen(daten, count);
		chartPanel.setPreferredSize(new Dimension(500, 270));
		this.setSize(400, 400);
		this.setLocation(500, 0);
	}
	
	/**
	 * Methode, die einzelne Methoden aufruft für die 
	 * Erstellung des Diagramms
	 * 
	 * @param daten
	 * @param count
	 * @return returnValue (JPanel)
	 */
	public JPanel diaErstellen(String[][] daten, int count) {

		initXYSeries();
		xYSeriesFuellen(daten,count);
		initChart();
		JPanel returnValue = diagramErstellen();
		return returnValue;
	}

	/**
	 * Initalisiert die Objekte für die Datensammlung der Diagramm-Werte
	 */
	public void initXYSeries() {
		s1 = new XYSeries("Rot");
		s2 = new XYSeries("Blau");
		s3 = new XYSeries("Gruen");
	}

	/**
	 * Serien mit Daten füllen...
	 */
	public void xYSeriesFuellen(String[][] daten, int count) {

		for (int i = 0; i <= count; i++) {
			for (int j = 0; j < daten[i].length; j++) {
				
				double zeitFaktor = berechnungbVergangeneZeit(i);
				
				// Wenn H vorkommt, ist der Blau-Wert im String enthalten
				if (daten[i][j].contains("H")
						&& daten[i][j].length() ==5) {
					s2.add(zeitFaktor, hexaInDezi(daten[i][j].substring(2, 4))); //Blaue Farbe
				}
				// Wenn L vorkommt, ist der Gruen- und Rot-Wert enthalten
				else if (daten[i][j].contains("L")
						&& daten[i][j].length() ==5) {
					s3.add(zeitFaktor, hexaInDezi(daten[i][j].substring(0, 2))); //Gelbe Farbe
					s1.add(zeitFaktor, hexaInDezi(daten[i][j].substring(2, 4))); //Rote Farbe
				}
			}
		}
		
		dataset = new XYSeriesCollection();
		dataset.addSeries(s1);
		dataset.addSeries(s2);
		dataset.addSeries(s3);
	}
	
	public double berechnungbVergangeneZeit(int counter){
		
		double zeitPunkt = counter * 0.166;
		
		return zeitPunkt;
		
	}
	

	/**
	 * Konvertiert die Hexadezimalwerte in Dezimalwerte
	 * @param kalibrierungsWert
	 * @return
	 */
	public int hexaInDezi(String kalibrierungsWert) {
		int deziWerte = Integer.parseInt(kalibrierungsWert, 16);
		return deziWerte;
	}



	/**
	 * Initalisierung des Chart's
	 */
	public void initChart() {
		chart = ChartFactory.createXYLineChart("RGB-Werte", // Überschrift der Applikation
				"Datensatz", // Achsen
				"Werte", // Achsen
				dataset, // Datensammlung
				PlotOrientation.VERTICAL, 
				true, // Legende soll angezeigt werden
				false, 
				false);
	}

	/**
	 * Erstellt den tatsächlichen Plot
	 * 
	 * @return chartPanel (ChartPanel)
	 */
	public ChartPanel diagramErstellen() {

		XYPlot plot = chart.getXYPlot();
		NumberAxis xAchse = new NumberAxis("Zeit in Min.");
		NumberAxis yAchse = new LogarithmicAxis("Dezimalwert");
		plot.setDomainAxis(xAchse);
		plot.setRangeAxis(yAchse);
		chart.setBackgroundPaint(Color.white);
		plot.setOutlinePaint(Color.gray);
		ChartPanel chartPanel = new ChartPanel(chart);
		chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
		setContentPane(chartPanel);
		return chartPanel;
	}


}


Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package package_ConnectionRSL20Serial;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;

import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

/**
 * @author Lukas
 */
public class MainFrames extends javax.swing.JFrame {
	
	// Deklarationen
	private static final long serialVersionUID = 1L;
	
	//Variable für den ausgelagerten Task
	public MainFrames main;

	//Variable zur Erzeugung der Ordnerstruktur
	private File ordner;
	
	//Variablen die direkt mit dem Kalibrierungsablauf verbunden sind
	public KalibrierungsAblaufRSL kalibrierungRSL;
	public ArrayList<KalibrierungsAblaufRSL> sammlungAllerKalibs = 
			new ArrayList<KalibrierungsAblaufRSL>();
	
	//Variablen vom Typ Boolean
	public boolean unsichtbar = false;
	public boolean sichtbar = true;
	
	//Variablen vom Tyo statische String's
	public static String value;
	public static String pathFile;
	public static String PATHORDNER = "C:\\KalibrierungRSL";

	/**
	 * Creates new form Versuch
	 */
	public MainFrames() {
		// Anlegen der Ordnerstruktur, falls nicht vorhanden
		ordner = new File("C:\\KalibrierungRSL");
		ordner.mkdir();
		//Variable main, dieses Frame hinzufügen
		main = this;
		//Setzt den Titel des Frames
		setTitle("Kalibrierungs-Tool RSL");
		//Initialisiert die Standard-Komponenten
		initComponents();
		initSpecials();
	}
	

	/**
	 * Methode für spezielle Anzeigen
	 * 
	 * @param image
	 */
	public final void initSpecials() {
			//Setzt den Anfangswert 
			spinnerKalibrierungsZeitraum.setValue(30);	
	}
	
	/**
	 * Initialisiert und lässt das Diagramm erscheinen
	 */
	public void diagrammInitialisieren(){
		
	}
	
	/**
	 * Methode initalisiert, positioniert und richtet die einzelnen
	 * Komponenten im Frame exakt aus
	 */
	private void initComponents() {

                     //QUELLCODE entfernt
	}

	/**
	 * Startet die Kalibrierung
	 * Die Kalibrierung selbst wurde in eine separate Task-Klasse ausgelagert, weil
	 * ansonsten das MainFrame einfriert und sich nicht mehr bedienen lässt
	 * 
	 * @param evt
	 * @throws IOException
	 * @throws InterruptedException
	 */
	private void menuItemKalibrierungStartenActionPerformed(
			java.awt.event.ActionEvent evt) throws IOException,
			InterruptedException {// GEN-FIRST:event_menuItemKalibrierungStartenActionPerformed

		// Speichert alle Werte am Schluss
		final ArrayList<Object> alleComSchnittstellen = new ArrayList<Object>();
		
		// Sammelt die Werte der Listen
		alleComSchnittstellen.addAll(Arrays.asList(listeCOM1bis4.getSelectedValues()));
		alleComSchnittstellen.addAll(Arrays.asList(listeCOM5bis9.getSelectedValues()));
		alleComSchnittstellen.addAll(Arrays.asList(listeCOM9bis12.getSelectedValues()));
		alleComSchnittstellen.addAll(Arrays.asList(listeCOM13bis16.getSelectedValues()));

		// Laufzeit wird gesetzt, hängt vom Spinner der Kalib.Zeit ab
		final int laufzeit = (Integer) spinnerKalibrierungsZeitraum.getValue();

		// Wenn die Größe von alleObjekte == 0 ist, dann keine Verbindung
		// herstellen
		if (alleComSchnittstellen.isEmpty()) {
			//Zeigt die Com-Schnittstellen an
			JOptionPane.showMessageDialog(this,
					"Sie haben keine COM-Schnittstelle gewählt",
					"!!  Warnung !!", JOptionPane.ERROR_MESSAGE);
		} else {// Wenn es nicht leer ist, verbindung herstellen
			JOptionPane.showMessageDialog(this, "Kalibrierung gestartet: "
					+ alleComSchnittstellen.toString() + " Laufzeit: "
					+ laufzeit + "min. ");
			
			
			KalibrierungsThread[] threads = new KalibrierungsThread[alleComSchnittstellen.size()];
			
			//Für alle Schnittstellen die ausgewählt wurden, muss auch ein 
			//Kalibrierungsablauf gestartet werden
			for (int i = 0; i < alleComSchnittstellen.size(); i++) {

				//Erzeugt ein neuen Thread, damit das Fenster nicht einfriert
				threads[i] = new KalibrierungsThread(
						alleComSchnittstellen.get(i).toString(), laufzeit,this);
				threads[i].start();
			}
			
			
		}
		

	}

	/**
	 * Erstellt und öffnet das Shortcut-Fenster
	 * 
	 * @param evt
	 */
	private void menuItemHilfeActionPerformed(java.awt.event.ActionEvent evt) {
		// Erzeugung eines neuen Objektes vom Typ HilfeFrame
		ShortcutsFrame hilfe = new ShortcutsFrame(this);
		// Setzen des Titels des Frames
		hilfe.setTitle("Hier wird Ihnen geholfen...");
		// Das Frame wird sichtbar gemacht
		hilfe.setVisible(sichtbar);
		// Groese des Frames wird an die Komponenten angepasst
		hilfe.pack();
		// MainFrame wird unsichbar gemacht
		this.setVisible(unsichtbar);
	}

	/**
	 * Öffnet den Ordner, indem sich die Textdateien befinden
	 * Fehler werden abgefangen
	 * @param evt
	 */
	private void menuItemOrdnerOeffnenActionPerformed(
			java.awt.event.ActionEvent evt) {
		try {
			//Explorer mit dem angegebene Pfad 
			Runtime.getRuntime().exec("explorer.exe " + PATHORDNER);
		} catch (IOException ex) {
			//Fehler wenn Ordnerstrucktur nicht angelegt werden konnte
			JOptionPane.showMessageDialog(this,"Ordnerstruktur konnte nicht angelegt werden...");
		}
	}

	/**
	 * Es erscheint ein Auswahlfeld aller Dateien die im
	 * Kalibrierungslauf bisher erzeugt wurden! Jetzt kann einfach per Klick die
	 * gewünschte Datei ausgewählt werden, diese Datei wird anschließend
	 * geöffnet.
	 * 
	 * @param evt
	 * @throws IOException
	 */
	private void menuItemTextfileOeffnenActionPerformed(
			java.awt.event.ActionEvent evt) throws IOException {
		// Initialisiert einen FileChooser
		JFileChooser chooser = new JFileChooser(PATHORDNER);
		// Erlaubt nur das Selektiern von Dateien
		chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
		// Öffnet das Open-Dialog
		int oeffnenGedrueckt = chooser.showOpenDialog(this);
		// Wenn Button gedrückt, dann...
		if (oeffnenGedrueckt == JFileChooser.APPROVE_OPTION) {
			// Selektierte Datei soll geöffnet werden
			Runtime.getRuntime().exec(
					"notepad.exe "
							+ chooser.getSelectedFile().getAbsolutePath());
		}
	}

	/**
	 * Es erscheint dem Enduser ein Auswahlfeld aller Dateien die im
	 * Kalibrierungslauf bisher erzeugt wurden! Jetzt kann einfach per Klick die
	 * gewünschte Datei ausgewählt werden, diese Datei wird anschließend
	 * gelöscht.
	 * 
	 * @param evt
	 */
	private void menuItemTextfileLoeschenActionPerformed(
			java.awt.event.ActionEvent evt) {
		
		//Neuer FileChooser wird erstellt, mit dem Pfad auf den Ordner der Textdateien
		JFileChooser chooser = new JFileChooser(PATHORDNER);
		//Überprüfung ob Textfile auch wirklich gelöscht wurde
		int loeschenGedrueckt = chooser.showDialog(this, "Löschen");
		//Wenn wirklch gelöscht werden soll...
		if (loeschenGedrueckt == JFileChooser.APPROVE_OPTION) {
			//Wenn File wirklich gelöscht wurde, dann...
			boolean geloescht = chooser.getSelectedFile().delete();
			if (geloescht) {
				//Message Dialog ausgeben
				JOptionPane.showMessageDialog(this, "File gelöscht");
			} else {
				//Message Dialog ausgeben
				JOptionPane.showMessageDialog(this,
						"File konnte nicht gelöscht werden");
			}
		}
	}

	/**
	 * Wenn der Button Programm beenden im Menü ausgewählt wird, wird abgefragt
	 * ob wirklich beendet werden soll, ist dies der Fall, wird beendet
	 * andernfalls das Event nicht gehandelt
	 * 
	 * @param evt
	 */
	private void menuItemProgrammBeendenActionPerformed(
			java.awt.event.ActionEvent evt) {

		// Auswahlfelder JA oder NEIN
		Object[] options = { "Ja", "Nein" };

		// Speichert das Case
		int wahl;
		// Initialisiert das Option Dialog
		wahl = JOptionPane.showOptionDialog(this,
				"Möchten Sie das Programm beenden?", "",
				JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
				null, options, null);

		// Wenn Wahl auf 0 gesetzt ist, dann...
		if (wahl == 0) {
			// Beenden des Programms
			System.exit(10);
		}
	}

	/**
	 * Beendet die Verbindung zu einem Gerät, falls ein Fehler aufgetreten ist
	 * 
	 * @param evt
	 * @throws IOException
	 */
	private void menuItemDisconnectActionPerformed(
			java.awt.event.ActionEvent evt) throws IOException {

		//Schleife über alle Kalibrierungsabläufe
		for (int i = 0; i < sammlungAllerKalibs.size(); i++) {

			/**
			 *Unterbricht die Verbindung zur ausgewählten Com-Schnittstelle
			 */
			
			if (sammlungAllerKalibs.get(i).getPortname() == listeCOM1bis4
					.getSelectedValue()) {
				sammlungAllerKalibs.get(i).disconnect();
			} else if (sammlungAllerKalibs.get(i).getPortname() == listeCOM5bis9
					.getSelectedValue()) {
				sammlungAllerKalibs.get(i).disconnect();
			} else if (sammlungAllerKalibs.get(i).getPortname() == listeCOM9bis12
					.getSelectedValue()) {
				sammlungAllerKalibs.get(i).disconnect();
			}
		}

	}

	/**
	 * Klasse leitet das ActionEvent zu einer anderen Methode weiter
	 * 
	 * @method menuItemKalibrierungStartenActionPerformed(evt)
	 * @param evt
	 * @throws IOException
	 * @throws InterruptedException
	 */
	private void btnKalibrierungStartenActionPerformed(
			java.awt.event.ActionEvent evt) throws IOException,
			InterruptedException {
		// Aufruf der Methode, ActionEvent wird weiter gegeben
		menuItemKalibrierungStartenActionPerformed(evt);
	}

	/**
	 * Diese Methode überprüft, ob der User das Programm auch
	 * wirklich beenden möchte oder nicht
	 * @param evt
	 */
	private void formWindowClosing(java.awt.event.WindowEvent evt) {

		// Auswahlfelder JA oder NEIN
		Object[] options = { "Ja", "Nein" };

		// Speichert das Case
		int wahl;
		// Initialisiert das Option Dialog
		wahl = JOptionPane.showOptionDialog(this,
				"Möchten Sie das Programm beenden?", "",
				JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
				null, options, null);

		// Wenn Wahl auf 0 gesetzt ist, dann...
		if (wahl == 0) {
			// Beenden des Programms
			System.exit(10);
		} else {
			setDefaultCloseOperation(MainFrames.DO_NOTHING_ON_CLOSE);
		}
	}// GEN-LAST:event_formWindowClosing

	/**
	 * Startet das Programm
	 * @param args
	 */
	public static void main(String args[]) {

		try {
			for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager
					.getInstalledLookAndFeels()) {
				if ("Nimbus".equals(info.getName())) {
					javax.swing.UIManager.setLookAndFeel(info.getClassName());
					break;
				}
			}
		} catch (ClassNotFoundException ex) {
			java.util.logging.Logger.getLogger(MainFrames.class.getName()).log(
					java.util.logging.Level.SEVERE, null, ex);
		} catch (InstantiationException ex) {
			java.util.logging.Logger.getLogger(MainFrames.class.getName()).log(
					java.util.logging.Level.SEVERE, null, ex);
		} catch (IllegalAccessException ex) {
			java.util.logging.Logger.getLogger(MainFrames.class.getName()).log(
					java.util.logging.Level.SEVERE, null, ex);
		} catch (javax.swing.UnsupportedLookAndFeelException ex) {
			java.util.logging.Logger.getLogger(MainFrames.class.getName()).log(
					java.util.logging.Level.SEVERE, null, ex);
		}

		java.awt.EventQueue.invokeLater(new Runnable() {
			public void run() {
				new MainFrames().setVisible(true);
			}
		});
	}

	// Variables declaration - do not modify//GEN-BEGIN:variables
	private javax.swing.JPanel Optionen;
	private javax.swing.JPanel Plot;
	private javax.swing.JButton btnKalibrierungStarten;
	private javax.swing.JMenuBar jMenuBar1;
	private javax.swing.JPanel hilfePanel;
	private javax.swing.JScrollPane jScrollPane1;
	private javax.swing.JScrollPane jScrollPane2;
	private javax.swing.JScrollPane jScrollPane3;
	private javax.swing.JScrollPane jScrollPane4;
	private javax.swing.JScrollPane jScrollPane5;
	private javax.swing.JScrollPane scrollPaneListe13bis16;
	[B]public JLabel lblChartAnzeige;[/B]	
private javax.swing.JTabbedPane tabPlot;
	private javax.swing.JTextArea infoTextHilfeOben;
	private javax.swing.JTextArea infoTextHilfeUnten;
	private javax.swing.JLabel lblKalibZeit;
	private javax.swing.JLabel lblPlotCOM;
	private javax.swing.JLabel lblPlotSchnittstelleAuswahl;
	private javax.swing.JLabel lblTelefonNummer;
	private javax.swing.JLabel lblUeberschrift;
	private javax.swing.JLabel lblUeberschriftHilfeTab;
	private javax.swing.JList listeCOM13bis16;
	private javax.swing.JList listeCOM1bis4;
	private javax.swing.JList listeCOM5bis9;
	private javax.swing.JList listeCOM9bis12;
	private javax.swing.JMenuItem menuItemHilfe;
	private javax.swing.JMenuItem menuItemVerbindungBeenden;
	private javax.swing.JMenuItem menuItemKalibrierungStarten;
	private javax.swing.JMenuItem menuItemOrdnerOeffnen;
	private javax.swing.JMenuItem menuItemProgrammBeenden;
	private javax.swing.JMenu menuItemTextdatei;
	private javax.swing.JMenuItem menuItemTextfileLoeschen;
	private javax.swing.JMenuItem menuItemTextfileOeffnen;
	private javax.swing.JMenu menuItemUebersicht;
	private javax.swing.JPanel plotDiagrammFeld;
	private javax.swing.JSpinner spinnerKalibrierungsZeitraum;
	private javax.swing.JTabbedPane tabAuswahl;
	private javax.swing.JSeparator trennStrich1;
	private javax.swing.JSeparator trennStrich2;
	private javax.swing.JSeparator trennStrich3;

	// End of variables declaration//GEN-END:variables

	/**
	 * Klasse die einen neuen Thread erstellt und in 
	 * dieser Klasse den Kalibrierungsablauf anstößt
	 * @author adlerlu
	 * 
	 */
	class KalibrierungsThread extends Thread {
		
		//Speichert der Portnamen
		String portName;
		//Gibt die durchLaufzeit an
		int durchLaufzeit;
		//Wenn Stop gesetzt
		boolean stop;

		/**
		 * Konstruktor zur Erzeugung eines Thread Objekts
		 * @param portname
		 * @param laufzeit
		 */
		public KalibrierungsThread(String portname, int laufzeit, MainFrames main) {
			this.portName = portname;
			this.durchLaufzeit = laufzeit;
		}

		@SuppressWarnings("deprecation")
		public void run() {
			try {
				//Erstellt ein neues Objekt vom Typ Kalibrierungsablauf
				kalibrierungRSL= new KalibrierungsAblaufRSL(portName,
						durchLaufzeit,main);
				//Sammlung alelr Kalibs, wird gefüllt mit dem Objekt von kalibrierungsRSL
				sammlungAllerKalibs.add(kalibrierungRSL);
				//Kalibrierung wird gestartet
				stop = kalibrierungRSL.anschalten(durchLaufzeit);

			} catch (IOException e) {
				e.printStackTrace();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

			if (stop) {
				JOptionPane.showMessageDialog(main, "Textfile erstellt: "
						+ kalibrierungRSL.getPortname());
				this.stop();
			}
		}
	}

}


-> Also wie ihr vielleicht gesehen habt, will ich das erzeugte Diagramm der Diagramm-Klasse im FETT-hinterlegten Label der MainFrame Klasse anzeigen lassen.

-> Ist das möglich? (Wenn Ja, wie?)

-> Wenn nicht möglich, was muss ich machen, damit ich es trotzdem in meinem Tab anzeigen lassen kann...
 
S

SlaterB

Gast
von JLabel, von lblChartAnzeige, strotz dein Programm ja nicht gerade,
die Chart erzeugst du anscheinend korrekt in ein JPanel, warum es nicht dabei belassen?
ein JPanel in einer GUI anzuzeigen ist doch eine recht normale Aufgabe

bzw. du machst gar ein eigenes JFrame, ein neues Fenster, was hast das mit einem kleinen Label zu tun?
oder ist das ein altes Vorlage-Programm?

mit viel Mühe ginge es vielleicht auch irgendwie in ein JLabel, aber warum?
und wenn dann könntest du erstmal mit einem Dummy-JPanel mit ein paar Komponenten oder paint-Befehlen anfangen,
mit JFreeChart hat das strenggenommen nichts zu tun
 
S

Sakulrelda

Gast
Das bedeutet, dass ich die Klasse mit dem Diagramm von einem JPanel erben lassen soll und dieses JPanel dann in der GUI wiedergeben ?

Zu deiner Frage mit dem extra Frame:

-> Nein es war kein Test bzw. Vorlagen-Programm. Ich wollte lediglich die Funktion des Diagramm's testen. Deshalb erbt es im Moment von einem ApplicationFrame (Events etc. pp.)

Sonst noch irgendwelche vorschläge?

Könntest du mir ein konkretes Beispiel mit Quellcode zeigen, wie du es machen würdest ?
 
S

SlaterB

Gast
> Nein es war kein Test bzw. Vorlagen-Programm. Ich wollte lediglich die Funktion des Diagramm's testen.

ist das kein Widerspruch? ;)

> Könntest du mir ein konkretes Beispiel mit Quellcode zeigen, wie du es machen würdest ?

dein Programm selber ist doch schon der Test, es wird ein JPanel erzeugt,
ob in separater Klasse oder in dem 'richtigen' JFrame, ist doch recht egal,
bisher in ein JFrame als ContentPane gesetzt, genauso geht auch ein normaler add()-Befehl,

minimalst genau an der Stelle, wo du eigentlich das JLabel einfügen wolltest,
mit Größenverhältnissen, Layout usw. kann man immer Probleme haben, aber das wird sich dann zeigen

für add(panel); habe ich keinen Beispielcode, nein,
das ist zu simpel, du hast genug Code vorliegen und letztlich hängt es im Detail an zu vielen Details
 
S

SakulRelda

Gast
Ich hab das jetzt mal so versucht:

Java:
public class DiagrammClass extends JPanel {

	public XYSeries s1;
	public XYSeries s2;
	public XYSeries s3;

-> Klasse umgeändert in ein JPanel



Java:
	diagramm.aktualisieren(datenRSL,zaehler);
	diagramm.setVisible(true);
	//Aktualisiert das aktuelleDiagramm
	tabPlot.add("PLOT", diagramm);
	tabPlot.validate();

-> Jetzt möchte ich dem Tab ein neuen Tab hinzufügen.
In diesem Tab will ich das Diagramm anzeigen lassen. Wo liegt das Problem, dass es nicht angezeigt wird ?


Gruß SakulRelda




Wieso klappt es nicht?
 
S

SlaterB

Gast
auf Befehle wie validate() oder setVisible(true) verzichte besser am Anfang, letzterer ist natürlich genau einmal zwingend nötig:
wenn alles fertig ist (nicht vorher!) auf das JFrame aufrufen,

alles komplizierte braucht man nur wenn man zur Laufzeit noch aktualisiert/ die GUI umstellt,
wenn überhaupt dann zumindest am Anfang uninteressant, baue erstmal eine GUI die von Anfang an funktioniert

nur mit
> DiagrammClass extends JPanel
ist noch nichts erklärt, die Methode diagramErstellen() erstellte ja bisher ein chartPanel, welches != dem DiagrammClass-Objekt ist,
dieses chartPanel ist das Panel, das muss irgendwo eingefügt werden, wie unschwer zu denken

vielleicht in das DiagrammClass-Objekt und jenes dann woanders, alles möglich, aber es braucht schon ein durchkonzipiertes Vorgehen, aus deinen kleinen Ausschnitten nicht richtig zu erkennen

'diagramm' läßt sich im oberen Code gar nicht finden, 'tabPlot' ist erwähnt, aber noch nicht eingebunden,
es gibt tausende mögliche Fehler an jeder Stelle ohne ein schlüssiges Gesamtprogramm

und nein, ich poste keines, immer noch gilt dass einfach ein chartPanel erzeugt wird und ein einzelnes add() alles erledigt,

wie man generell beliebige Komponenten sinnvoll einfügt, z.B. in ein JTabbedPane, ist natürlich für sich lange Arbeit,
wie gesagt kannst du auch alles mit einfachen Komponenten, deinem JLabel oder einen Dummy-JPanel üben,
mit JFreeChart muss das nichts zu tun haben, außer dass an einer Stelle dann statt Komponente X das bestimmte Panel, eben das ChartPanel verwendet wird
 
S

SakulRelda

Gast
Hallo Ihr,

ich bins nochmal :)

@SLATER:
Danke für deine Tipps, funktioniert jetzt ohne Probleme.

Anderes Problem, in gleichem Zusammenhang:

Ich füge wie gesagt das Diagramm (PLOT) zum Tab hinzu. Das Problem hierbei ist, dass die Daten des Diagramms variabel anhand eines Sensor's generiert werden.
Daraus folgt, dass das Tab immer wieder aktualisiert werden muss.

Kann ich das bestehende Panel aus einem Tab auch rauslöschen und einfach wieder ein neues einzeichnen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing JFreeChart Domain Axis Label Abstand zu TickUnitLabel Allgemeine Java-Themen 9
G jFreeChart Allgemeine Java-Themen 5
T Jfreechart continuous series mit fester Länge Allgemeine Java-Themen 23
H JFreechart createMultiplePieChart Allgemeine Java-Themen 2
M Suche Alternative zu JFreeChart Allgemeine Java-Themen 11
T jfreechart Linien/Punkttyp anpassen Allgemeine Java-Themen 1
S JFreechart: ValueMarker mit der Maus ziehen? Allgemeine Java-Themen 12
A JFreeChart funktioniert nicht :( Allgemeine Java-Themen 6
M Swing JFreechart x-Achse DateAxis, start im Ursprung Allgemeine Java-Themen 3
S Performante Visualisierung groẞer Datenmengen (ohne JFreeChart) Allgemeine Java-Themen 22
J JFreeChart - Mehrere X-Achsen Einteilungen Allgemeine Java-Themen 3
T JFreeChart Diagramm speichern - Problem mit ImageIO nach Projektexport Allgemeine Java-Themen 3
B JFreeChart -> TimeSeries-Plot -> mehr y-Achsen Allgemeine Java-Themen 2
F JFreeChart Größe anpassen Allgemeine Java-Themen 8
K JFreeChart - Einträge in DomainAxis anpassen Allgemeine Java-Themen 2
I 2D-Grafik JFreeChart ChartPanel Problem mit dynamischer Grösse Allgemeine Java-Themen 3
O JFreeChart: ständiges Updaten der Chart stoppen Allgemeine Java-Themen 4
M Diagramm mit JfreeChart Allgemeine Java-Themen 8
M JFreeChart mehrere PieCharts erstellen Allgemeine Java-Themen 2
M JFreeChart piechart - labelAnzeige Allgemeine Java-Themen 2
ARadauer JFreeChart: Beschriftung anzeigen Allgemeine Java-Themen 6
B JFreeChart - Achsenbeschriftung Allgemeine Java-Themen 4
ff Labels mit JFreeChart ausrichten Allgemeine Java-Themen 2
K JFreeChart Achsenbeschriftung ändern? Allgemeine Java-Themen 4
C jFreechart Diagram erstellen Allgemeine Java-Themen 2
G JFreeChart Allgemeine Java-Themen 5
G Jfreechart zwei charts Allgemeine Java-Themen 2
S JFreeChart LineChart Punkte über NULL Werte hinweg verbinden Allgemeine Java-Themen 5
E JFreeChart jars mit in meine Jar packen Allgemeine Java-Themen 6
G jfreechart probleme mit dem package? Allgemeine Java-Themen 2
D JFreeChart und Kuchendiagramm Allgemeine Java-Themen 3
P JFreeChart Fehlermeldung Allgemeine Java-Themen 2
P jFreeChart, binäre Signale Allgemeine Java-Themen 2
P jfreeChart y- Achsen hinzufügen Allgemeine Java-Themen 2
P jfreeChart Allgemeine Java-Themen 9
MQue JFreeChart Allgemeine Java-Themen 3
K JFreeChart Allgemeine Java-Themen 3
K JFreeChart und itext: Bildprobleme Allgemeine Java-Themen 4
G java.lang.NullPointerException JFreeChart Allgemeine Java-Themen 5
M JFreeChart: Zuviele Balken, Übersicht leidet dehr darunter Allgemeine Java-Themen 6
G JFreeChart - Labels Allgemeine Java-Themen 2
G Suche Beispiele jFreeChart Allgemeine Java-Themen 12
G Daten aus MySQL-Datenbank an JFreeChart übergeben Allgemeine Java-Themen 3
G JFreeChart drucken Allgemeine Java-Themen 2
B Zebra GC420d - Label Printer Allgemeine Java-Themen 1
B Long in einen Double umwandeln und im Label anzeigen Allgemeine Java-Themen 7
V USB Label Drucker Allgemeine Java-Themen 7
L Label- & Textfelderzeugung durch Button Allgemeine Java-Themen 1
M Probleme mit String in Label übergeben. Allgemeine Java-Themen 6
S Text in for Schleife in Label einfügen Allgemeine Java-Themen 4
P ActionListener / Label Name auslesen Allgemeine Java-Themen 2
D break block by label Allgemeine Java-Themen 14
N String array in Label ausgeben Allgemeine Java-Themen 6
MQue Anzeige mit Label kombinieren Allgemeine Java-Themen 4
S Bild durchs Label laufen Allgemeine Java-Themen 14
K bildflackern in label Allgemeine Java-Themen 2
7 Mehrzeiliges Label Allgemeine Java-Themen 16
H Nullpointer exception, Attribute in Label schreiben? Allgemeine Java-Themen 4
S Probleme mit LinkedList und Label mit gridbagLayout Allgemeine Java-Themen 2
H set. in label ausgeben ? Allgemeine Java-Themen 2
G Text und Bild/Icon im Label/Button positionieren/ausrichten Allgemeine Java-Themen 2
J Zeitzähler in Label? Allgemeine Java-Themen 6
M Bild auf Label. Allgemeine Java-Themen 8
L Label mit Images Allgemeine Java-Themen 20

Ähnliche Java Themen

Neue Themen


Oben