JLabel-Text in anderem Tab ändern

Status
Nicht offen für weitere Antworten.

muemmel_0811

Bekanntes Mitglied
Hi zusammen,

bitte jetzt nicht lachen, aber ich krieg's einfach nicht hin 😳

Ich zwei Tabs, die jeweils als "Grundlage" immer ein JPanel besitzen, auf dem dann erst Eingabefelder, Labels usw. enthalten sind.
Beide Tabs werden beim Programmstart geladen - Calc.java:
Code:
public class Calc extends JFrame{
	private static final long serialVersionUID = 1L;
	InputGui ig = new InputGui();
	JTabbedPane tab = new JTabbedPane();
	ResultGui rg = new ResultGui();
	Calc() {
		super();
		initLaF();
		setTitle("Berechnung");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new BorderLayout());
		tab.addTab("Input", ig);
		tab.addTab("Ergebnis", rg);
		
		getContentPane().add(tab, BorderLayout.CENTER);
		ig.setTab(tab);
	}
	public void initLaF() {
		try {
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
			SwingUtilities.updateComponentTreeUI(this);
			SwingUtilities.updateComponentTreeUI(tab);
			SwingUtilities.updateComponentTreeUI(ig);
			SwingUtilities.updateComponentTreeUI(rg);
		}
		catch(Exception c){
		}
	}
	public static void main(String[] args) {
		JFrame f = new Calc();
		f.setSize(900,800);
		f.setLocation(200,20);
		f.setVisible(true);
	}
}

Für die Berechnung der Ergebnisse hab ich nochmals eine gesonderte Datei angelegt, und von dieser aus wollte ich dann auf die ResultGui zugreifen und bspw. mit
Code:
...
ResultGui rg = new ResultGui();
rg.pGrund.ggM.setText("blabla");
...
den Text des Labels ändern - das klappt aber nicht - das Label bleibt leer 🙁
Die ResultGui.java sieht so aus:
Code:
package pack;
import info.clearthought.layout.TableLayout;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ResultGui extends JPanel{
	private static final long serialVersionUID = 1L;
	Grund pGrund = new Grund();
	ResultGui() {
		super();
		double border = 10.0;
		double size[][] = {{border, 500, TableLayout.FILL},
							{border, 20,60,100}};
		setLayout(new TableLayout(size));
		add(pGrund, "1, 1");
	}
	public class Grund extends JPanel {
		JLabel lb = new JLabel("<html>[b]+[/b]</html>");
		JLabel lb2 = new JLabel("Ergebnis 1");
		JLabel ggA = new JLabel();
		JLabel ggE = new JLabel();
		JLabel ggM = new JLabel();
		Grund() {
			super();
			double b = 5.0;
			double tl[][] = {{b, 20, 200, 90, 90, 100},
								{TableLayout.FILL}};
			setLayout(new TableLayout(tl));
			setBackground(Color.white);
			
			add(lb, "1, 0");
			add(lb2,"2, 0");
			add(ggA, "3, 0");
			add(ggE,"4, 0");
			add(ggM,"5, 0");
		}
	}
}


Was muss ich tun, damit ich das JLabel im Nachhinein beschriften kann?

Danke und Grüße,
muemmel_0811
 
guck mal mit system.ou, ob der setText Befehl wirklich aufgerufen wird, und setz einen Anfangstext auf das JLabel (mithilfe des Konstruktors) um zu sehen, ob das Label überhaupt sichtbar ist

edit: soweit ich weiß, ruft setText eh repaint auf oder so, probiers aber mal aus
 
Danke Euch beiden, aber geholfen hat's leider nicht 🙁

Ich hab hier mal eine kleine Test-Applikation gebastelt, falls noch jemand Lust hat mir beim Problemlösen zu helfen.
Simple.java
Code:
package p;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class Simple extends JFrame{
	JTabbedPane tab = new JTabbedPane();
	Rein re = new Rein();
	Raus ra = new Raus();	
	Simple() {
		super();
		initLaF();
		setTitle("TEST-Umgebung");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new BorderLayout());
		tab.addTab("Input", re);
		tab.addTab("Ergebnis", ra);		
		getContentPane().add(tab, BorderLayout.CENTER);		
		re.setTab(tab);
	}	
	public void initLaF() {
		try {
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
			SwingUtilities.updateComponentTreeUI(this);
			SwingUtilities.updateComponentTreeUI(tab);
			SwingUtilities.updateComponentTreeUI(re);
			SwingUtilities.updateComponentTreeUI(ra);
		}
		catch(Exception c){
		}
	}
	public static void main(String[] args) {
		JFrame f = new Simple();
		f.setSize(500,200);
		f.setLocation(200,20);
		f.setVisible(true);
	}
}

Rein.java
Code:
package p;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JTabbedPane;
public class Rein extends JTabbedPane{
	JButton test = new JButton("Test");
	Raus r = new Raus();
	JTabbedPane tab = new JTabbedPane();
	Rein() {
		super();
		setLayout(new FlowLayout());
		test.addActionListener(new Butt());
		add(test);
	}	
	public void setTab(JTabbedPane ta) {
		tab = ta;
	}	
	public JTabbedPane getTab() {
		return tab;
	}	
	class Butt implements ActionListener{
		public void actionPerformed(ActionEvent ae) {
			getTab().setSelectedIndex(1);
			r.lbl.setText("BliBlaBlubBlub");
		}
	}
}

Raus.java
Code:
package p;
import java.awt.FlowLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Raus extends JPanel{
	JLabel lbl = new JLabel("TextTextText");
	Raus() {		
		super();
		setLayout(new FlowLayout());
		add(lbl);
	}
}

Grüße,
muemmel_0811
 
Du erzeugst dir in Rein() neue Objekte und versuchst die der Klasse Simple zu ändern!

Du könntest dir z.B. im Konstruktor Rein die JTabbedPane und Raus mit übergeben. Dann brauchst du in Rein keine neuen Objekte mehr zu erstellen.
 
Hallo Mathias,

vielen vielen Dank für Deine Hilfe!
Ich hab zwar eine ganze Zeit lang gebraucht, bis ich umgesetzt hab, was Du mir erklärt hast, aber dafür funktioniert es jetzt :applaus:

Und hier für alle die, die evtl. mal vor dem gleichen Problem stehen, nochmal die funktionierende Version:
Simple.java
Code:
package p;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class Simple extends JFrame{
	JTabbedPane tab = new JTabbedPane();
	Raus ra = new Raus();
	Rein re = new Rein(tab, ra);
	Simple() {
		super();
		initLaF();
		setTitle("TEST-Umgebung");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new BorderLayout());
		tab.addTab("Input", re);
		tab.addTab("Ergebnis", ra);
		getContentPane().add(tab, BorderLayout.CENTER);
	}
	public void initLaF() {
		try {
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
			SwingUtilities.updateComponentTreeUI(this);
			SwingUtilities.updateComponentTreeUI(tab);
			SwingUtilities.updateComponentTreeUI(re);
			SwingUtilities.updateComponentTreeUI(ra);
		}
		catch(Exception c){
		}
	}
	public static void main(String[] args) {
		JFrame f = new Simple();
		f.setSize(500,200);
		f.setLocation(200,20);
		f.setVisible(true);
	}
}

Rein.java
Code:
package p;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
public class Rein extends JTabbedPane{
	JButton test = new JButton("Test");
	JTabbedPane tt = new JTabbedPane();
	Raus pp;
	Rein(JTabbedPane t, Raus r) {
		super();
		setLayout(new FlowLayout());
		test.addActionListener(new Butt());
		add(test);
		tt = t;
		pp = r;
	}
	class Butt implements ActionListener{
		public void actionPerformed(ActionEvent ae) {
			tt.setSelectedIndex(1);
			pp.lbl.setText("sldfjksldfwoief wfw eofiwjeflm");
		}
	}
}

Raus.java
Code:
package p;
import java.awt.FlowLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Raus extends JPanel{
	JLabel lbl = new JLabel("dumdidum");
	Raus() {
		super();
		setLayout(new FlowLayout());
		add(lbl);
	}
}

Nochmals Danke - und schon wieder was gelernt 🙂
Grüße,
muemmel_0811
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben