JLabel wird nicht aktualisiert

Captain83

Mitglied
Hello again 😀,

einigen von euch wird der folgende Quellcode vielleicht bekannt vorkommen, wenn auch das Problem jetzt ein anderes ist. 😉
Mein Programm funktioniert eigentlich wunderbar, bis auf die Kleinigkeit, dass die Aktualisierung des JLabels "füllstandText" nicht funktioniert... Das sollte eigentlich über die am Schluss des Codes befindliche Methode setFüllstand funktionieren. Die Methode wird auch von der anderen Klasse aufgerufen, das habe ich im Debug-Mode überprüft. Auch
Code:
füllstandText.setText(füllstandString);
wird aufgerufen, soweit ich das überprüfen konnte. Leider wird aber der Text nicht aktualisiert....


Java:
public class Ampel extends JFrame {
	public enum Ampelzustand {ROT, GRÜN, STÖRUNG};
	Ampelzustand z;
	Ampellicht lampeOben;
	Ampellicht lampeUnten;
	int füllstand;
	String füllstandString;
	JPanel centerPanel = new JPanel();
	JLabel füllstandText = new JLabel();
			
	public Ampel() {
		super("Warenkorb - Füllstandsanzeige");
		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
		setSize(1680,1050);
		setVisible(true);
		setResizable(false);
		getContentPane().setBackground(Color.BLACK);
		
		Container cp = getContentPane();
        cp.setLayout(new BorderLayout());

        JPanel ampellichter = new JPanel();
        
    	JPanel topPanel = new JPanel();
    	JLabel topPanelText = new JLabel("Warenkorb - Füllstandsanzeige");
    	topPanel.add(topPanelText);
    	topPanel.setBackground(Color.WHITE);
    	topPanel.setPreferredSize(new Dimension(1680, 50));
    	
    	JPanel bottomPanel = new JPanel();
    	JLabel bottomPanelText = new JLabel("Bei technischen Problemen bitte bei TD-40 melden!");
    	bottomPanel.add(bottomPanelText);
    	bottomPanel.setBackground(Color.WHITE);
    	bottomPanel.setPreferredSize(new Dimension(1680, 50));
    	
    	JPanel centerPanel = new JPanel();
    	this.centerPanel = centerPanel;
    	centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.Y_AXIS));
    	JLabel centerPanelText = new JLabel("Aktueller Füllstand:");
    	centerPanel.add(centerPanelText);
    	
    	System.out.println("Füllstandcheck: " + füllstand);
    	füllstandString = String.valueOf(füllstand);
    	System.out.println("Füllstand again: " + füllstandString);
    	JLabel füllstandText = new JLabel(füllstandString);
    	this.füllstandText = füllstandText;
    	centerPanel.add(centerPanelText);
    	centerPanel.add(füllstandText);
		
		ampellichter.setLayout(new BoxLayout(ampellichter, BoxLayout.Y_AXIS));
		
		Ampellicht lampeOben = new Ampellicht(45, 25, 400, 400, Color.BLACK);
		this.lampeOben = lampeOben;
		ampellichter.add(lampeOben, BorderLayout.CENTER);
		System.out.println("Lampe oben erzeugt!");
		Ampellicht lampeUnten = new Ampellicht(45, 0, 400, 400, Color.BLACK);
		this.lampeUnten = lampeUnten;
		ampellichter.add(lampeUnten, BorderLayout.CENTER);
		System.out.println("Lampe unten erzeugt");
		
		ampellichter.setSize(500, 1000);
		ampellichter.setPreferredSize(new Dimension(500, 1000));
		cp.add(ampellichter, BorderLayout.WEST);
		cp.add(topPanel, BorderLayout.NORTH);
		cp.add(bottomPanel, BorderLayout.SOUTH);
		cp.add(centerPanel, BorderLayout.CENTER);
	}
	
	public void setZustand(String zustand) {
		if (Ampelzustand.GRÜN.toString().equals(zustand)) {
			System.out.println("GRÜN");
			lampeOben.setColor(Color.BLACK);
			lampeOben.repaint();
			lampeUnten.setColor(Color.GREEN);
			lampeUnten.repaint();
		}
		
		else if (Ampelzustand.ROT.toString().equals(zustand)) {
			System.out.println("ROT");
			lampeOben.setColor(Color.RED);
			lampeOben.repaint();
			lampeUnten.setColor(Color.BLACK);
			lampeUnten.repaint();
		}
		
		else {
			System.out.println("Gelb blinkend");
			try {
				
				/*
				Ampellicht lampeOben = new Ampellicht(0, 0, 400, 400, Color.BLACK);
				add(lampeOben);
				Ampellicht lampeUnten = new Ampellicht(0, 450, 400, 400, Color.YELLOW);
				add(lampeUnten);
				*/
				//Thread.sleep(1000);
				
				/*
				Ampellicht lampeOben = new Ampellicht(0, 0, 400, 400, Color.YELLOW);
				con.add(lampeOben);
				Ampellicht lampeUnten = new Ampellicht(0, 450, 400, 400, Color.BLACK);
				con.add(lampeUnten);
				*/
				
			}
			
			catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	public void setFüllstand(int f) {
		this.füllstand = f;
		füllstandText.setText(füllstandString);
		validate();
		repaint();
		
		/*
		System.out.println("Füllstand: " + füllstand);
		füllstandString = String.valueOf(füllstand);
    	System.out.println("Füllstand again: " + füllstandString);
    	JLabel füllstandText = new JLabel(füllstandString);
    	centerPanel.add(füllstandText);
    	*/
	}
}

Ich bedanke mich im Voraus
Gruß
Euer Captain
 
Du hast ein Feld "füllstand" und ein Feld "füllstandString". "füllstand" setzt du, "füllstandString" liest du. Eines der beiden Felder ist zuviel (Hint: es ist "füllstandString").
 
Naja, das int kann ich ja nicht direkt in das setText() einsetzen oder?

Ich habe vergessen, dass natürlich in der Methode der String aktualisiert werden muss.

Ich habe
Code:
 füllstandString = String.valueOf(füllstand);
aus dem Konstruktor rausgenommen und in die Methode eingefügt und schon funktionierts 😀
Oh man, dafür musste ich jetzt stundenlang suchen.... ;(

Ich danke dir recht herzlich, du hast mich auf die richtige Spur gebracht :applaus:

Der Feierabend ist gerettet, ich wünsche noch einen schönen Abend

Gruß
Euer Captain
 
Um noch etwas aufzuräumen, Du kannst den int nicht direkt setText übergeben, aber "füllstandString" brauchst du trotzdem nicht:

Java:
füllstandText.setText(String.valueOf(füllstand));

Schönen Abend
 

Zurück
Oben