Hallo Community,
habe ein Problem mit einem GUI. Ich will unten eine Statusleiste einfügen, die ein Label enthält, das mir den Status über die aktuell durchgeführten Berechnungen gibt. Leider wird die Textaänderung nicht angezeigt. Habe dazu mal ein Minimalbeispiel gebastelt:
Wenn man nun "OK" klickt, dann soll eigentilch "Working..." dastehen, nach Abschluss dann "Ready!" Die Berechnungen werden durch einen Wait-Thread simuliert. Ich habe schon einige Foren dazu durchsucht, aber immer nur gefunden, dass das GUI erst nach Abschluss der Threads neu gezeichnet wird. Wie kann ich eine Neuzeichnung erzwingen?
und
, wie in einigen Threads vorgeschlagen, funktionieren nicht.
habe ein Problem mit einem GUI. Ich will unten eine Statusleiste einfügen, die ein Label enthält, das mir den Status über die aktuell durchgeführten Berechnungen gibt. Leider wird die Textaänderung nicht angezeigt. Habe dazu mal ein Minimalbeispiel gebastelt:
Java:
import javax.swing.*;
public class StatusbarTest extends JFrame {
private static final long serialVersionUID = 1L;
public StatusbarTest() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
status = new JLabel(" ");
ok = new JButton("OK");
ok.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okDo(evt);
}
});
ok.setEnabled(true);
getContentPane().add(ok, java.awt.BorderLayout.CENTER);
getContentPane().add(status, java.awt.BorderLayout.SOUTH);
pack();
}
private void okDo(java.awt.event.ActionEvent evt) {
status.setText("Working...");
doSomething();
status.setText("Ready!");
}
private void doSomething() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String Args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new StatusbarTest().setVisible(true);
}
});
}
private JLabel status;
private JButton ok;
}
Wenn man nun "OK" klickt, dann soll eigentilch "Working..." dastehen, nach Abschluss dann "Ready!" Die Berechnungen werden durch einen Wait-Thread simuliert. Ich habe schon einige Foren dazu durchsucht, aber immer nur gefunden, dass das GUI erst nach Abschluss der Threads neu gezeichnet wird. Wie kann ich eine Neuzeichnung erzwingen?
Code:
repaint()
Code:
validate()