Swing Aktualisieren von JFrame in einem onClick-Ereignis

Player2000

Mitglied
Hallo

Ich habe ein Problem mit dem ActionListener.
Um es einfacher zu erklären, mache ich dies anhand eines Beispiels,
da so keinen Sinn ergibt: Das heisst nicht fragen, was das Programm soll ;D
Mein Code:

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class Problem {
	static JFrame frame;
	static JLabel lb;
	static JButton btn;
	
	
	public static void main(String[] args) {
		frame = new JFrame();
		frame.setSize(500, 500);
		frame.setLayout(null);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		
		lb = new JLabel("Problem-lb");
		lb.setBounds(10, 10, 150, 20);
		
		btn = new JButton("Klick micht");
		btn.setBounds(10, 40, 150, 20);
		btn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				lb.setLocation(10, 70);
				try {
					Thread.sleep(5000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		
		frame.add(lb);
		frame.add(btn);
	}
}

Das Frame wird erst nach dem Ende des 'Thread.sleep' aktualisiert.
Wie kann ich mein frame vor dem 'Thread.sleep' aktualisieren?

Schon jetzt Danke für die Hilfe

mfg Player2000
 
C

Camino

Gast
Das Frame wird erst nach dem Ende des 'Thread.sleep' aktualisiert.
Wie kann ich mein frame vor dem 'Thread.sleep' aktualisieren?

Hmm, das Thread.sleep einfach rausnehmen? Oder für was brauchst du das? Was soll denn da überhaupt aktualisiert werden? Und das setVisible(true) für den Frame immer ganz zum Schluss aufrufen, wenn alle Komponenten erzeugt und dem Frame hinzugefügt wurden.
 

Player2000

Mitglied
Hmm, das Thread.sleep einfach rausnehmen? Oder für was brauchst du das? Was soll denn da überhaupt aktualisiert werden? Und das setVisible(true) für den Frame immer ganz zum Schluss aufrufen, wenn alle Komponenten erzeugt und dem Frame hinzugefügt wurden.

In meinem Programm brauchts den Thread.sleep.
Meine Frage ist, wie kann ich ein JFrame WÄHREND und nicht nach einem onClick-Ereignis aktualisieren.
 

Player2000

Mitglied
1. Layoutmanager lernen, null layout ist böse

Zufrieden?
Das Problem existiert immer noch: der Text wird erst nach beenden des onClick-Events aktualisiert

Java:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class Problem {
	static JFrame frame;
	static JLabel lb;
	static JButton btn;
	
	
	public static void main(String[] args) {
		frame = new JFrame();
		frame.setSize(300, 70);
		frame.setLayout(new FlowLayout());
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		lb = new JLabel("Problem-lb");
		
		btn = new JButton("Klick micht");
		btn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				lb.setText("geklickt");
				frame.validate();
				frame.repaint();
				try {
					Thread.sleep(5000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
		});
		
		frame.add(lb);
		frame.add(btn);
	}
}
 
C

Camino

Gast
Hmm, ich bin mir nicht sicher, aber vielleicht liegt es wirklich am EDT. Der ist halt für die grafische Darstellung deines Programmes zuständig. Und wenn der mit was anderem beschäftigt ist, dann müssen manche Darstellungsoperationen eben manchmal warten. Dafür gibt es mittlerweile wohl auch den SwingWorker, mit dem man länger dauernde Sachen vom EDT auslagern kann. Wie gesagt, so ganz genau weiss ich das aber leider nicht.
 

Player2000

Mitglied
Ja an dem Lag es, ein Beispiel wie es funktionieren würde hätte aber geholfen.
Mit der Methode
Java:
frame.paint(frame.getGraphics());
klappt es.
 

bERt0r

Top Contributor
omg nein. Wenn du in einem ActionListener ein Thread.sleep ausführst, blockierst du die aktualisierung der GUI. Deshalb musst du, wenn du möchtest dass nach einem Buttonklick verzögert etwas passiert das ganze in einen eigenen Thread auslagern. Lies dir meinen Link mit der Concurrency durch. Die Klasse Timer wird dir auch helfen.
 

Player2000

Mitglied
Das habe ich auch :lol:
aber ich wollte nicht eine meilenlange erklärung abgeben. Der Befehl den ich gesucht habe war wichtiger. Ich habe jetzt aber herausgefunden, dass es den Befehl gar nicht braucht, wenn ich ein anderer Thread mache :D
trotzdem Danke :toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T JFrame aktualisieren AWT, Swing, JavaFX & SWT 2
lumpigerAffe Swing Jframe aktualisieren AWT, Swing, JavaFX & SWT 27
O JFrame: Daten alle paar Sekunden aktualisieren AWT, Swing, JavaFX & SWT 3
N Swing MainWindow(JFrame) aktualisieren(neuzeichnen) repaint AWT, Swing, JavaFX & SWT 4
M JFrame aktualisieren/refreshen? AWT, Swing, JavaFX & SWT 4
A Haupt JFrame inkl. aller Komponenten aktualisieren? AWT, Swing, JavaFX & SWT 3
C JFrame aktualisieren AWT, Swing, JavaFX & SWT 2
B JFrame aktualisieren ohne es neu zu erzeugen AWT, Swing, JavaFX & SWT 1
C Default table model aktualisieren AWT, Swing, JavaFX & SWT 7
G JavaFX BarChart während der Runtime aktualisieren AWT, Swing, JavaFX & SWT 4
T TableView aktualisieren AWT, Swing, JavaFX & SWT 1
W JavaFX TableView aktualisieren AWT, Swing, JavaFX & SWT 1
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
J JavaFX Label aktualisieren AWT, Swing, JavaFX & SWT 18
M Muss man die ObservableList aktualisieren? AWT, Swing, JavaFX & SWT 3
B Bounds aller Panels aktualisieren AWT, Swing, JavaFX & SWT 0
-DD Lobby/Spielerliste aktualisieren bei Suche AWT, Swing, JavaFX & SWT 1
M JavaFX Automatisches Aktualisieren der Seite AWT, Swing, JavaFX & SWT 26
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
H JavaFX - Label aktualisieren AWT, Swing, JavaFX & SWT 1
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
J JTextfield automatisch aus zweiter Klasse aktualisieren AWT, Swing, JavaFX & SWT 5
J Tableview Daten hinzufügen und aktualisieren AWT, Swing, JavaFX & SWT 5
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
C JavaFX TreeTableView aktualisieren AWT, Swing, JavaFX & SWT 10
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
thobren JavaFX textarea nach setPrefRowCount Ansicht aktualisieren AWT, Swing, JavaFX & SWT 1
Regedit JavaFX Java Canvas hört ständig auf zu aktualisieren/malen AWT, Swing, JavaFX & SWT 3
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
H Combobox aktualisieren AWT, Swing, JavaFX & SWT 2
A JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren! AWT, Swing, JavaFX & SWT 5
L GUI - Jpanel - Splitpane will nicht aktualisieren AWT, Swing, JavaFX & SWT 4
2 Zeit Differenz automatisch aktualisieren AWT, Swing, JavaFX & SWT 1
N JavaFX Stage aktualisieren AWT, Swing, JavaFX & SWT 5
A JComboBox mit Array aktualisieren AWT, Swing, JavaFX & SWT 7
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
O Statusleiste mit JLabel aktualisieren AWT, Swing, JavaFX & SWT 5
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
AssELAss Verzeichnis JFileChooser aktualisieren AWT, Swing, JavaFX & SWT 0
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
T Int-Wert aktualisieren? AWT, Swing, JavaFX & SWT 9
A Swing JTextArea aus anderer Klasse in realtime aktualisieren AWT, Swing, JavaFX & SWT 3
S Combobox aktualisieren AWT, Swing, JavaFX & SWT 3
M Swing Aktualisieren eines JPanels nach Tasteneingabe AWT, Swing, JavaFX & SWT 2
H Swing JfreeChart aktualisieren - mit daten aus thread AWT, Swing, JavaFX & SWT 3
J GUI/Random aktualisieren? AWT, Swing, JavaFX & SWT 3
T JtextPane Zeile aktualisieren AWT, Swing, JavaFX & SWT 3
B JTable aktualisieren AWT, Swing, JavaFX & SWT 22
K SWT DataBinding, Anzahl der Zeilen aktualisieren AWT, Swing, JavaFX & SWT 4
G JRadioButton aktualisieren nicht... AWT, Swing, JavaFX & SWT 10
C ToolTip aktualisieren AWT, Swing, JavaFX & SWT 2
D Swing JComboBox aktualisieren AWT, Swing, JavaFX & SWT 4
C TextFeld in Verbindung zur ComboBox automatisch aktualisieren AWT, Swing, JavaFX & SWT 7
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
S Inhalt einer JComboBox aktualisieren AWT, Swing, JavaFX & SWT 6
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
A Swing Aktualisieren eines JPanels AWT, Swing, JavaFX & SWT 13
A JButton in einem Array aktualisieren AWT, Swing, JavaFX & SWT 8
Kenan89 JTable aktualisieren AWT, Swing, JavaFX & SWT 21
B Swing Fensterinhalt aktualisieren AWT, Swing, JavaFX & SWT 11
S Spezielle komponente aktualisieren AWT, Swing, JavaFX & SWT 9
V Swing JProgressBar aktualisieren AWT, Swing, JavaFX & SWT 14
C Combobox bei Tabellenänderung mit aktualisieren AWT, Swing, JavaFX & SWT 11
C jTable aktualisieren AWT, Swing, JavaFX & SWT 2
M TabbpedPane Anzeige aktualisieren AWT, Swing, JavaFX & SWT 6
X Swing JTree aktualisieren AWT, Swing, JavaFX & SWT 2
P AWT Fenster aktualisieren, nachdem ich JComboBox ändere AWT, Swing, JavaFX & SWT 9
D JTree nach Klick auf einen Hyperlink aktualisieren AWT, Swing, JavaFX & SWT 3
D Elternfenster vom JDialog aktualisieren oder nicht ? AWT, Swing, JavaFX & SWT 7
M Swing JLabel (mit einer Grafik) aktualisieren AWT, Swing, JavaFX & SWT 2
S JTable - Aktualisieren / Neu zeichnen. AWT, Swing, JavaFX & SWT 5
C Daten aus DB -> JTable aktualisieren klappt nicht AWT, Swing, JavaFX & SWT 16
M Zeichnung aktualisieren AWT, Swing, JavaFX & SWT 3
D Swing JTextField aus anderer Klasse aktualisieren AWT, Swing, JavaFX & SWT 2
L GUI aktualisieren? AWT, Swing, JavaFX & SWT 4
X Tabelle während Funktionsaufruf aktualisieren AWT, Swing, JavaFX & SWT 11
V Panel/Icon aktualisieren AWT, Swing, JavaFX & SWT 10
R JFreeChart aktualisieren wenn sich die Ausgangsdaten ändern AWT, Swing, JavaFX & SWT 8
M Swing Aktualisieren von laufenden Anwendungen AWT, Swing, JavaFX & SWT 10
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
S Swing Probleme beim Aktualisieren einer JComboBox nach Auswahländerung AWT, Swing, JavaFX & SWT 2
J JLabel aktualisieren AWT, Swing, JavaFX & SWT 8
K Swing JTable Model aktualisieren AWT, Swing, JavaFX & SWT 2
K LayoutManager Borderlayout - NORTH aktualisieren AWT, Swing, JavaFX & SWT 10
C JMenuBar aktualisieren? AWT, Swing, JavaFX & SWT 2
K JTable aktualisieren AWT, Swing, JavaFX & SWT 9
L Swing Daten in JTable aktualisieren AWT, Swing, JavaFX & SWT 5
S Swing JTable nach einer Änderung einer Zelle komplett aktualisieren. AWT, Swing, JavaFX & SWT 10
D Swing JLabels in einer Schleife aktualisieren AWT, Swing, JavaFX & SWT 2
H UI aktualisieren AWT, Swing, JavaFX & SWT 9
R Tab-Inhalte aktualisieren AWT, Swing, JavaFX & SWT 4
B Swing JFreeCharts echtzeit Charts bzw Aktualisieren von Charts AWT, Swing, JavaFX & SWT 8
D JTree zur richtigen Zeit aktualisieren. AWT, Swing, JavaFX & SWT 3
Y Swing Aktualisieren eines JPanel mit ArrayList im TableLayout AWT, Swing, JavaFX & SWT 2
S JTable aktualisieren AWT, Swing, JavaFX & SWT 4
U JTable in einem Tab aktualisieren aus anderem Tab heraus initiiert AWT, Swing, JavaFX & SWT 4
S SWT WizardPage - Button anzeigen und Text-Widgets dynamisch aktualisieren AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen


Oben