Swing update eines Labels nicht sichtbar

diggaa1984

Top Contributor
heyho,

das allseits beliebte Thema: "Komponente xy wird nicht geupdatet" :)

Mich hats nur auch grad wieder erwischt und ich find die Lösung net.
Java:
@Override
public void propertyChange(final PropertyChangeEvent evt) {
	if ("id".equals(evt.getPropertyName())) {
		//TODO: hier klappt was net, aber Event kommt durch und text intern korrekt
		idLabel.setText(idLabel.getText() + evt.getNewValue());
	}//if			
}//propertyChanged

das ist Teil eines JPanels, auf welchem ich ein Label für eine ID habe. Das Event wird ordnungsgemäß erkannt und auch bearbeitet. Beim debuggen sehe ich den Text des Label geändert. Allerdings nicht auf dem Panel ???:L

Erstellt wird die Gui wie folgt, ausgehend von einer anderen Klasse:
Java:
private void setupMainFrame() {
	SwingUtilities.invokeLater(new Runnable() {
	
		@Override
		public void run() {
			try {
				UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
			} catch (Exception e) {
				e.printStackTrace();
			}//try
				
			MainFrame mf = new MainFrame(GuiController.this);
			mf.setVisible(true);
		}//run
	});
}//setupMainFrame

Das Erzeugen des MainFrames, zieht alles erdenklich andere an Gui-Komponenten mit sich, somit werden doch alle auf dem EDT erstellt?!
Nur warum bekomm ich dann das setText() - Event nicht mit?
 

eRaaaa

Top Contributor
Kann man jetzt wohl so kaum etwas zu sagen bin ich der Meinung.
Hält
Code:
idLabel
auch wirklich eine Referenz auf das Label welches sich auf dem Panel befindet?
Ansonsten bereite doch mal einen kurzen Beispielcode vor den mal nachvollziehen und evtl. auch selbst ausführen kann
 

diggaa1984

Top Contributor
die letzten beiden genannten Befehle sind unnötig

is mir bewusst, daher hab ich die gar nich erst erwähnt :)

aehm mal ne Klasse die zu 99% die Struktur aufweist, welche bei mir intern vorliegt.
Die Änderung geschieht im MainController. Diese Änderung wird per PropertyChangeSupport an die Listener propagiert. Der GuiController erhält diese Events und leitet sie an die ihm bekannten Listener weiter, welche bei Bedarf das Event verarbeiten. Soviel zum groben Ablauf.

Java:
import java.beans.*;
import javax.swing.*;
import java.awt.*;
import java.util.*;


public class MainController {
	
	public static void main(String[] args) {
		MainController mc = new MainController();
		GuiController gc = new GuiController(mc);
		
		mc.setId(3);
	}//main
	
	
	/**************************  MAINCONTROLLER  ****************************/
	
	private int id = 0;
	private PropertyChangeSupport pcs;
	
	public MainController() {
		pcs = new PropertyChangeSupport(this);
	}//constructor
	
	public void setId(int id) {
		pcs.firePropertyChange("id",this.id, id);
		this.id = id;
	}//setId
	

	public void addPropertyChangeListener(PropertyChangeListener pcl) {
		pcs.addPropertyChangeListener(pcl);
	}//addPropertyChangeListener
	
	
	/**************************  GUICONTROLLER *******************************/
	
	public static class GuiController implements PropertyChangeListener {

		private MainController mainController;
		private java.util.List<PropertyChangeListener> listener;
	
	
		public GuiController(MainController mainController) {
			listener = new ArrayList<PropertyChangeListener>();
			this.mainController = mainController;
			this.mainController.addPropertyChangeListener(this);
			setupMainFrame();
		}//constructor


		public void addPropertyChangeListener(PropertyChangeListener pcl) {
			listener.add(pcl);
			System.out.println("GuiController - listener added: " + pcl.getClass().getName());
		}//addPropertyChangeListener
		
	
		@Override
		public void propertyChange(PropertyChangeEvent evt) {
			System.out.println("GuiController - incoming event: " + evt.getPropertyName());
			for (PropertyChangeListener pcl: listener) {
				System.out.println("Send event to: " + pcl.getClass().getName());
				pcl.propertyChange(evt);
			}//for
		}//propertyChangeListener
	
	
		/**
		* 
		*/
		private void setupMainFrame() {
			SwingUtilities.invokeLater(new Runnable() {
			
				@Override
				public void run() {
					try {
						UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
					} catch (Exception e) {
						e.printStackTrace();
					}//try
				
					MainFrame mf = new MainFrame(GuiController.this);
					mf.setVisible(true);
				}//run
			});
		}//setupMainFrame
	}//GuiController
	
	
	/**************************  MAINFRAME *******************************/
	
	private static class MainFrame extends JFrame {
		
		private static final String DEFAULT_TITLE = "Client-Application";
		private GuiController guiController;
	
	
		public MainFrame(GuiController guiController) {
			super(DEFAULT_TITLE);
			this.guiController = guiController;
			setup();
		}//constructor
	
	
		private void setup() {
			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			this.setMinimumSize(new Dimension(1000,500));
		
			add(new MainPanel(guiController));
		
			this.setLocationRelativeTo(null);
			pack();
		}//setup

	}//MainFrame
	
	
	/**************************  MAINPANEL  ******************************/
	
	private static class MainPanel extends JPanel implements PropertyChangeListener {
		
		private JLabel idLabel;
		private GuiController guiController;
		
		public MainPanel(GuiController guiController) {
			super();
			this.guiController = guiController;
			this.guiController.addPropertyChangeListener(this);
			setup();
		}//constructor
		
		
		private void setup() {
			idLabel = new JLabel("ID: ");
			idLabel.setFont(new Font(idLabel.getFont().getFontName(), Font.BOLD, 14));
			add(idLabel);
		}//setup
		
		
		@Override
		public void propertyChange(final PropertyChangeEvent evt) {
			System.out.println(evt.getPropertyName());
			if ("id".equals(evt.getPropertyName())) {
				System.out.println("new Value: " + evt.getNewValue());
				//TODO: hier klappt was net, aber Event kommt durch und text intern korrekt
				idLabel.setText(idLabel.getText() + evt.getNewValue());
				System.out.println("new Label-Text: " + idLabel.getText());
			}//if			
		}//propertyChanged
	}//MainPanel
}

Das ganze als KSKB verpackt. Auffällig ist, das keine Ausgabe "send event to listener .. " aus dem GuiController erscheint. Der Listener "MainPanel" ist aber bekannt, wie der Ausgabe zu entnehmen ist. Die Ausgaben beim MainPanel fehlen ebenfalls .. warum weiss ich nicht, aber wie gesagt, beim debuggen kommt das Event an, und intern ist der Text des Labels korrekt geändert worden, nur seh ich diese Änderung nicht. So ich werd bald zum Zug müssen, habt ihr also n bissel Zeit zum Forschen :)
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Naja, anhand der Ausgabe siehst du doch schon das Problem! Das Event wird gefeuert, bevor der Listener hinzugefügt wurde:
Java:
		try {
			Thread.sleep(4000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		mc.setId(3);

und dann solltest du auch etwas sehen können...
Der Code ist aber grausam *g*
 

diggaa1984

Top Contributor
hm ok .. im eigentlichen programm geschieht das ändern der ID erst, nachdem ich nen Socket aufmache und mit dem Server connected bin. Kann es also auch da passieren, dass das Erstellen des Sockets schneller is als die GUI!? mal testen

Optimierungsvorschläge gern gesehen, aber aus Zeitgründen erst später realisierbar ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
T ProgressBox - Update AWT, Swing, JavaFX & SWT 9
Ernesto95 JavaFX JavaFX GUI mit sehr vielen Update requests AWT, Swing, JavaFX & SWT 4
G update, paintComponent AWT, Swing, JavaFX & SWT 1
T GUI Update /EDT AWT, Swing, JavaFX & SWT 7
izoards JavaFX Concurrency Update UI AWT, Swing, JavaFX & SWT 35
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
J TableView Update/Refresh CPU AWT, Swing, JavaFX & SWT 2
A Verständnisfragen im Umgang mit update() und JFrames AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JComboBox update der Daten AWT, Swing, JavaFX & SWT 8
blazingblade JavaFX Tableview Clock Column update AWT, Swing, JavaFX & SWT 5
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
M JavaFX ComboBox: Update zur Laufzeit AWT, Swing, JavaFX & SWT 16
W Swing ProgressBar update AWT, Swing, JavaFX & SWT 4
B IconImage update im Tabbedpane AWT, Swing, JavaFX & SWT 3
M Update überschreiben klappt nicht AWT, Swing, JavaFX & SWT 4
Q JList Update Problem AWT, Swing, JavaFX & SWT 1
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
M "Update" der JTable funktioniert nicht AWT, Swing, JavaFX & SWT 2
S Swing Update eine JTabelle nach einer Drag&Drop Operation AWT, Swing, JavaFX & SWT 0
C Swing Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum? AWT, Swing, JavaFX & SWT 12
V Swing Update Textarea AWT, Swing, JavaFX & SWT 2
T Event Handling JFreeChart Update AWT, Swing, JavaFX & SWT 2
Farbtopf Live update JFreeChart AWT, Swing, JavaFX & SWT 3
F Swing GUI-Thread für automatisches Update nutzen AWT, Swing, JavaFX & SWT 10
El_Lobo Swing bei Update von Graphik Koordinatensystem nicht jedesmal neu zeichnen AWT, Swing, JavaFX & SWT 2
M Update JPanel AWT, Swing, JavaFX & SWT 12
N update model nach dem filtern AWT, Swing, JavaFX & SWT 2
E Umgang mit der Update Methode AWT, Swing, JavaFX & SWT 38
E Swing Update JTable AWT, Swing, JavaFX & SWT 6
L Update JTree Verzeichnisse AWT, Swing, JavaFX & SWT 9
G Swing Update-Funktion für Swing-Anwendung AWT, Swing, JavaFX & SWT 5
E Swing JTextField Listener nach Update?! AWT, Swing, JavaFX & SWT 2
D Swing JTable Problem bei automatischem update von Zellen AWT, Swing, JavaFX & SWT 3
P 2D-Grafik PaintComponent() übernimmt keine Werte aus update() AWT, Swing, JavaFX & SWT 8
N Tablle nach SQL-Update neu Laden AWT, Swing, JavaFX & SWT 4
M SWT grabExcessHorizontalSpace update ? refresh ? AWT, Swing, JavaFX & SWT 6
P Observer und GUI Update AWT, Swing, JavaFX & SWT 2
w0ddes Swing Update: Laufendes GUI updaten AWT, Swing, JavaFX & SWT 8
D JTable während edit kein update machen lassen AWT, Swing, JavaFX & SWT 2
M Swing Kein update bei simulierten HTML-Link AWT, Swing, JavaFX & SWT 4
C SWT Shell update probleme - Mausbewegung nötig AWT, Swing, JavaFX & SWT 2
hdi Swing GUI update vs. Process Speed AWT, Swing, JavaFX & SWT 31
hdi Swing Gui Update Problem (EDT) AWT, Swing, JavaFX & SWT 6
C JList update über tabbedPane? AWT, Swing, JavaFX & SWT 18
M Update einer JTEextArea AWT, Swing, JavaFX & SWT 2
H JTable mySQL Update AWT, Swing, JavaFX & SWT 8
S Update des fensters beim Ersetzen von JPanels AWT, Swing, JavaFX & SWT 9
G Features nach Update löschen AWT, Swing, JavaFX & SWT 2
J Fragen zur Vererbung und Update AWT, Swing, JavaFX & SWT 12
B Update von JLabels AWT, Swing, JavaFX & SWT 2
C Habe Probleme beim Bild laden! *Update 30.11.2006* AWT, Swing, JavaFX & SWT 28
C JTreeTable update Problem AWT, Swing, JavaFX & SWT 4
S Probleme mit dem Update einer JList AWT, Swing, JavaFX & SWT 7
B View zeichnet Daten aus dem Model ohne Update AWT, Swing, JavaFX & SWT 4
A Update von Frameinhalt und Scrollbar AWT, Swing, JavaFX & SWT 11
F MVC: Update von View und Controller AWT, Swing, JavaFX & SWT 5
C JTable update: Selektion beibehalten AWT, Swing, JavaFX & SWT 12
P paintComponent /paint/ update/ offscreenImage / Graphics2D / AWT, Swing, JavaFX & SWT 4
S JMenuBar + update AWT, Swing, JavaFX & SWT 3
G JTree - ungültiger selection update AWT, Swing, JavaFX & SWT 2
G Problem mit JLabel Update AWT, Swing, JavaFX & SWT 3
C [JTable] Update der Datenbank AWT, Swing, JavaFX & SWT 6
N update()-Methode für Canvas AWT, Swing, JavaFX & SWT 9
A problem mit update nach event, JSplitpane spinnt AWT, Swing, JavaFX & SWT 2
S Update von Grafik auf JPanel AWT, Swing, JavaFX & SWT 2
M GUI Update während der Verarbeitung einer Methode AWT, Swing, JavaFX & SWT 3
M update JTable AWT, Swing, JavaFX & SWT 3
T Problem bei Update von JTables in JTabbedPane AWT, Swing, JavaFX & SWT 2
D Problem beim Update von unsichtbaren JComponents mit Timern AWT, Swing, JavaFX & SWT 5
D Swing: GUI-Update-Problem AWT, Swing, JavaFX & SWT 3
J Warum funktioniert das Update des UI nicht? AWT, Swing, JavaFX & SWT 8
I GUI-Update-Probleme AWT, Swing, JavaFX & SWT 2
G Update von JPanel nach Buttonbetätigung AWT, Swing, JavaFX & SWT 1
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L JavaFX Validierung eines Spinner AWT, Swing, JavaFX & SWT 1
M Builden eines lauffähigen JAR Files AWT, Swing, JavaFX & SWT 3
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
M JavaFX rotieren eines Kreises mit konstanter Geschwindigkeit AWT, Swing, JavaFX & SWT 1
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
M JavaFX Auf ein UI Elemement eines anderen Controllers zugreifen AWT, Swing, JavaFX & SWT 0
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
Tronert JavaFX Linienstärke eines Separators ändern? AWT, Swing, JavaFX & SWT 3
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0

Ähnliche Java Themen

Neue Themen


Oben