Dynamisch Komponenten in einem JPanel bzw JFram austauschen

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo

kann man zur Laufzeit Komponenten austauschen?

Ich habe verschiedene Messwerte aus verschiedenen Dateien.
Diese Messwerte stehen in den Dateien als Blöcke und so sollen sie auch wieder dargestellt werden.
Aus den Daten wird mit JFreeChart ein Chart Array erzeugt, pro Block eins.

Angenommen ich lese aus einer Datei zwei Blöcke aus erstelle ich also 2 Charts und schreibe die in ein Array
Nun zeig ich noch die Messdaten in einem JTable in einer TabbedPane an, pro Tab ein Block.

Wenn ich nun das Tab wechsel möchte ich das auch das entsprechende Chart angezeigt wird.

Und genau da ist mein Problem ich weiß nicht wie, hab schon versucht mit remove() die entsprechende Komponenten zu entfernen und neu erzeugte zu setzen aber bringt nichts.

Hier mein Code:
Code:
public class WorkbenchSample extends JFrame 
{
	/**
	 * 
	 */
	private static final long serialVersionUID = -1397645983376696508L;
	private JTable table[];
	private JTabbedPane tabPane;
	private JScrollPane scroll1, scroll2;
	private JPanel mainPanel;
	private String messTitel = "Messreihe ";
	private String tLabels[] = {"Batterie1", "Batterie2", "Batterie3" };
	private JComboBox comboBox;
	private JButton ok = new JButton("OK");
	private JPanel pan; 
	private CellConstraints cc;
	private FormLayout layout;
	private ChartPanel chartPanel;
	private JFreeChart[] chartArray;
	
	public WorkbenchSample(Connector con) 
	{
		super("WorkbenchSample");
	
		ok.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				generateGuiComponents(((Messreihe)comboBox.getSelectedItem()).getDdlist(), false);
				System.out.println(((Messreihe)comboBox.getSelectedItem()).getPath());
			}		
		});
		
		layout = new FormLayout("4dlu,pref,2dlu,pref,4dlu","4dlu,pref,2dlu,pref,2dlu,pref,4dlu");
		cc = new CellConstraints();
		
		comboBox = new JComboBox(con.getAll());
		mainPanel = new JPanel(layout);

		pan = new JPanel(new FormLayout("pref,2dlu,pref","pref"));
		pan.add(comboBox, cc.xy(1, 1));
		pan.add(ok, cc.xy(3, 1));
		
		generateGuiComponents(con.getAll()[0].getDdlist(), true);

		mainPanel.add(pan, cc.xy(2, 4));

		add(mainPanel);
		
		
		addWindowListener(new WindowClosingAdapter());
		setVisible(true);
		pack();
	}
	
	/**
	 * Generiert die Componenten fügt sie aber noch nicht hinzu
	 * */
	
	private void generateGuiComponents(LinkedList<Double[][]> ddlist, boolean firstTime)
	{
		int count = 0;
		tabPane = new JTabbedPane();
		Iterator<Double[][]> ddIter = ddlist.iterator();
		chartArray = new JFreeChart[ddlist.size()];
		table = new JTable[ddlist.size()];
		Double[][] tmp = null;
		
		while(ddIter.hasNext())
		{
			tmp = ddIter.next();
			table[count] = new JTable(tmp, tLabels);
			table[count].setAutoscrolls(true);
			tabPane.addTab(messTitel + (count+1),table[count]);
			
			chartArray[count] = ChartFactory.createLineChart("SampleChart", "Messreihe Sample", "Volt", DatasetUtilities.createCategoryDataset("Reihe", "Messpunkt", tmp), PlotOrientation.VERTICAL, true, true, true);
			count++;
		}
		
		//HIER IST DAS PROBLEM Das nächste Chart wird nicht gesetzt
		tabPane.addChangeListener(new ChangeListener(){

			@Override
			public void stateChanged(ChangeEvent e) 
			{
				chartPanel = new ChartPanel(chartArray[tabPane.getSelectedIndex()]);
			}
			
		});
		if(firstTime)
			chartPanel = new ChartPanel(chartArray[0]);
		
		scroll1 = new JScrollPane(chartPanel);
		scroll2 = new JScrollPane(tabPane);
		
		mainPanel.add(scroll1, cc.xy(2, 2));
		mainPanel.add(scroll2, cc.xy(2, 6));
                this.repaint();
	}

Noch ein Screenshot um sich das ganze besser vorstellen zu können



Ich hoffe ich habe mich deutlich ausgedrückt das fällt mir manchmal nämlich schwer :)

Peace
 
G

Guest

Gast
Danke, nach sowas habe ich jetzt zwei Tage gesucht :applaus:

Das löst aber mein Problem noch nicht ganz. Wenn ich nun die Datei mit den Messwerten wechsle muss ich mir vollkommen neue Komponenten erstellen und das geht wohl nicht, nach einem repaint wird gar kein Chart mehr angezeigt und der JTable verändert sich nicht.

Für so eine tolle Lösung wie die mit dem Tutorial wäre ich sehr dankbar

Peace
 
G

Guest

Gast
ich hab das mal so probiert



Code:
	private void generateGuiComponents(LinkedList<Double[][]> ddlist, boolean firstTime)
	{
		int count = 0;
		tabPane = new JTabbedPane();
		cards = new JPanel(new CardLayout());
		Iterator<Double[][]> ddIter = ddlist.iterator();
		Double[][] tmp = null;
		
		while(ddIter.hasNext())
		{
			tmp = ddIter.next();
			tabPane.addTab(messTitel + (count+1), new JTable(tmp, tLabels));
			cards.add(new ChartPanel(ChartFactory.createLineChart("SampleChart", "Messreihe Sample", "Volt", DatasetUtilities.createCategoryDataset("Reihe", "Messpunkt", tmp), PlotOrientation.VERTICAL, true, true, true)),""+count);
			count++;
		}
	
		tabPane.addChangeListener(new ChangeListener(){

			@Override
			public void stateChanged(ChangeEvent e) 
			{
				CardLayout cl = (CardLayout)cards.getLayout();
				cl.show(cards, "" + tabPane.getSelectedIndex());
			}	
		});
		
		scroll1 = new JScrollPane(cards);
		scroll2 = new JScrollPane(tabPane);
		
		mainPanel.add(scroll1, cc.xy(2, 2));
		mainPanel.add(scroll2, cc.xy(2, 6));
		
		cards.revalidate();
		tabPane.revalidate();
		scroll1.revalidate();
		scroll2.revalidate();
		mainPanel.revalidate();
		
		this.repaint();
	}

also alles revalidiert und dann ein repaint aber leider ändert sich da garnichts bzw. schon der ChangeListener funktioniert nicht mehr
 

Wolfgang Lenhard

Bekanntes Mitglied
Das Problem hatte ich auch bereits öfters, ohne dass ich weiß, wo eigentlich der Fehler liegt. Als Workaround funktioniert meistens, die Komponente zuerst setVisible(false) und dann wieder true zu setzen. Probiers mal, vielleicht hilft es ja.
 
G

Guest

Gast
Kannst du mir mal ein Beispiel geben mit dem setVisible(false) und revalidate wo und wann ich das machen muss. Nach dem erzeugen? Nach dem adden? Muss ich überhaupt neu adden?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
L Komponenten dynamisch erkennen und bearbeiten AWT, Swing, JavaFX & SWT 8
W JavaFX Farben dynamisch anpassen AWT, Swing, JavaFX & SWT 4
B Größe der Parent-Component dynamisch an children anpassen AWT, Swing, JavaFX & SWT 30
K Buttons dynamisch erstellen (NetBeans) AWT, Swing, JavaFX & SWT 10
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
ralfb1105 JavaFX Dynamisch TableView Spalten erstellen AWT, Swing, JavaFX & SWT 4
A Swing JPanels dynamisch untereinander einfügen AWT, Swing, JavaFX & SWT 3
Wurstsemmel SWT MenuItem dynamisch hinzufügen AWT, Swing, JavaFX & SWT 2
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
MaxG. Swing Dynamisch grafische Objekte erzeugen AWT, Swing, JavaFX & SWT 12
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
S CombinedDomainXYPlot und dynamisch hinzugefügte subplots: Darstellungsprobleme AWT, Swing, JavaFX & SWT 3
K Liniendicke für Line Chart dynamisch ändern AWT, Swing, JavaFX & SWT 0
llabusch JavaFX Dynamisch alles vergrößern (wie im Browser) AWT, Swing, JavaFX & SWT 3
agent47 JavaFX TreeView Struktur dynamisch einlesen AWT, Swing, JavaFX & SWT 1
D JavaFX Dynamisch erzeugte Buttons sollen Code ausführen. AWT, Swing, JavaFX & SWT 2
D JavaFX Dynamisch erzeugte Checkboxen aus VBox auslesen AWT, Swing, JavaFX & SWT 3
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
I JTable dynamisch aus ArrayList befüllen AWT, Swing, JavaFX & SWT 3
T JavaFX Flexible Layouts dynamisch erstellen / Design-Inspirationen AWT, Swing, JavaFX & SWT 8
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
J JavaFX TextArea dynamisch Icon im Background anzeigen AWT, Swing, JavaFX & SWT 2
T JPanel dynamisch erstellen AWT, Swing, JavaFX & SWT 4
G FormLayout dynamisch wachsend AWT, Swing, JavaFX & SWT 0
T JTable dynamisch mit ArrayList AWT, Swing, JavaFX & SWT 2
A Swing Logikaufgabe: Zeilenanzahl einer JTable mit 3d String dynamisch anpassen AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
P TableViewerColumn dynamisch erzeugen AWT, Swing, JavaFX & SWT 3
Kandum obj_JMenu.addMenuListener - variable Anzahl an JMenus / menulistenern & frame.setTitle() dynamisch AWT, Swing, JavaFX & SWT 7
A HELP: JFieldText dynamisch setzen -> langsam AWT, Swing, JavaFX & SWT 19
C Swing CardLayout dynamisch erweitern AWT, Swing, JavaFX & SWT 11
B Link eines Icons dynamisch gestalten AWT, Swing, JavaFX & SWT 2
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
P Gifs dynamisch auf GUI anzeigen AWT, Swing, JavaFX & SWT 4
E Breite eines JButton dynamisch ändern AWT, Swing, JavaFX & SWT 3
P Swing Dynamisch zeichnen mit Shapes wie Rectangle2D.Float ? AWT, Swing, JavaFX & SWT 6
C SWT - widget dynamisch erzeugen und anzeigen AWT, Swing, JavaFX & SWT 10
C Tooltip dynamisch setzen AWT, Swing, JavaFX & SWT 7
T Elemente zu JList dynamisch hinzufügen AWT, Swing, JavaFX & SWT 4
X jTextFields dynamisch initialisieren AWT, Swing, JavaFX & SWT 2
A Swing Dynamisch Objekte erzeugen AWT, Swing, JavaFX & SWT 3
L Label dynamisch awt AWT, Swing, JavaFX & SWT 2
H Swing Symbol in Taskleiste dynamisch aus- bzw. einblenden AWT, Swing, JavaFX & SWT 14
B JTabbedPane mit Enumeration dynamisch füllen AWT, Swing, JavaFX & SWT 5
L Dynamisch Objekte in Canvas zeichnen AWT, Swing, JavaFX & SWT 5
D Panels Dynamisch zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 2
J Java 2D - dynamisch zeichnen AWT, Swing, JavaFX & SWT 4
A AWT HSB-Farben dynamisch berechnen AWT, Swing, JavaFX & SWT 5
P Dynamisch Sortieren AWT, Swing, JavaFX & SWT 2
B Swing Dynamisch Elemente in JScrollPane hinzufügen AWT, Swing, JavaFX & SWT 6
Airwolf89 Swing Dynamisch auf Objekte in einer GUI zugreifen AWT, Swing, JavaFX & SWT 10
Airwolf89 Swing Tabs dynamisch ausblenden AWT, Swing, JavaFX & SWT 3
H Swing Register (jTabbedPane) dynamisch hinzufügen? AWT, Swing, JavaFX & SWT 7
Airwolf89 Swing Anzahl der Tabellenspalten dynamisch setzen AWT, Swing, JavaFX & SWT 2
S SWT WizardPage - Button anzeigen und Text-Widgets dynamisch aktualisieren AWT, Swing, JavaFX & SWT 12
R JLabel und JSlider dynamisch erzeugen? AWT, Swing, JavaFX & SWT 3
W Swing dynamisch Buttons in JEditorPane erstellen AWT, Swing, JavaFX & SWT 2
Pithecanthropus Swing JPanels dynamisch austauschen AWT, Swing, JavaFX & SWT 8
S Applet mit Graphics dynamisch vergrößern AWT, Swing, JavaFX & SWT 3
Spot84 jtable mit checkboxnode dynamisch per arraylist füllen AWT, Swing, JavaFX & SWT 8
bugmenot Dynamisch erzeugte jLabels werden nicht angezeigt. AWT, Swing, JavaFX & SWT 5
ABstraCT JCombobox dynamisch füllen (erstes Element Problem) AWT, Swing, JavaFX & SWT 4
J JLabels usw. dynamisch anlegen AWT, Swing, JavaFX & SWT 8
A JList dynamisch vergrößern AWT, Swing, JavaFX & SWT 4
G Felder dynamisch erzeugen! AWT, Swing, JavaFX & SWT 3
I Textfields dynamisch erzeugen AWT, Swing, JavaFX & SWT 4
B JTree dynamisch aufbauen AWT, Swing, JavaFX & SWT 3
L JPanel dynamisch zuweisen AWT, Swing, JavaFX & SWT 5
T Inhalt einer Combobox dynamisch erstellen? AWT, Swing, JavaFX & SWT 13
S JTextField-Größe dynamisch an Inhalt anpassen. AWT, Swing, JavaFX & SWT 3
S Farben eienr JTextPane dynamisch zuweisen AWT, Swing, JavaFX & SWT 2
J Zugriff auf "dynamisch erzeugte" JTextFields AWT, Swing, JavaFX & SWT 2
D Systray-Icon dynamisch zeichnen AWT, Swing, JavaFX & SWT 8
B JTree dynamisch nachladen AWT, Swing, JavaFX & SWT 3
U Label Icon dynamisch belegen AWT, Swing, JavaFX & SWT 12
F JRadioButton dynamisch benennen? AWT, Swing, JavaFX & SWT 7
A dynamisch weitere jpanels untereinander hinzufügen AWT, Swing, JavaFX & SWT 10
S dynamisch erzeugte buttons AWT, Swing, JavaFX & SWT 22
J Größe einer JTextArea dynamisch anpassen. AWT, Swing, JavaFX & SWT 2
F Komponente dynamisch erzeugen AWT, Swing, JavaFX & SWT 4
M ImageObserver, Bild dynamisch erzeugen und Speichern AWT, Swing, JavaFX & SWT 24
M gezeichnete Punkte dynamisch verschieben mit mousedragged AWT, Swing, JavaFX & SWT 4
S inhalt dynamisch erzeugter JComboBoxs auslesen AWT, Swing, JavaFX & SWT 3
G Mousecursor selber dynamisch generieren. AWT, Swing, JavaFX & SWT 6
G JRadioButton dynamisch erzeugen AWT, Swing, JavaFX & SWT 6
M Look and Feels dynamisch abfragen AWT, Swing, JavaFX & SWT 13
S Columnname dynamisch verändern AWT, Swing, JavaFX & SWT 2
H JComboBoxen dynamisch erzeugen AWT, Swing, JavaFX & SWT 3
K toolbar dynamisch erzeugen AWT, Swing, JavaFX & SWT 2
H große mengen an jbuttons dynamisch erzeugen? AWT, Swing, JavaFX & SWT 15
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben