Gadget2
PC-Selbstbauer(in)
Okay, ich habe einmal eine Frage zu Thread.sleep(). Folgender Code stellt meine Problemstellung da:
Ziel des Ganzen ist, dass nach einem Klick auf den Button das Label für 3 Sekunden lang rot leuchtet und dann wieder grau wird. So wie das Thread.sleep jetzt eingebracht ist, wartet die GUI auch brav drei Sekunden, aber ohne das Label vorher rot gefärbt zu haben.
Ich grübel jetzt schon etwas länger daran, aber in meinem konkreten Beispiel konnte ich es bisher noch nicht zum Laufen bringen, vielleicht kann mir ja jemand dabei helfen.
LG
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
/**
*
* Beschreibung: bei Knopfdruck soll sich das Label für 3 Sekunden lang rot färben, dann wider grau werden
*
* @version 1.0 vom 20.11.2013
* @author
*/
public class Testgui extends JFrame {
// Anfang Attribute
private JPanel jPanel1 = new JPanel(null, true);
private JButton btn = new JButton();
private JLabel lbl = new JLabel();
// Ende Attribute
public Testgui(String title) {
// Frame-Initialisierung
super(title);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 300;
int frameHeight = 300;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setResizable(false);
Container cp = getContentPane();
cp.setLayout(null);
// Anfang Komponenten
jPanel1.setBounds(0, 0, 297, 273);
jPanel1.setOpaque(false);
cp.add(jPanel1);
btn.setBounds(48, 48, 73, 33);
btn.setText("btn");
btn.setMargin(new Insets(2, 2, 2, 2));
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
btn_ActionPerformed(evt);
}
});
jPanel1.add(btn);
lbl.setBounds(144, 96, 75, 33);
lbl.setText("text");
jPanel1.add(lbl);
// Ende Komponenten
setVisible(true);
} // end of public Testgui
// Anfang Methoden
public void btn_ActionPerformed(ActionEvent evt) {
// TODO hier Quelltext einfügen
lbl.setForeground(new Color(255, 0, 0)); //Label rot färben
try { //3 Sekunden warten
Thread.sleep(3000);
}catch(InterruptedException e) {
e.printStackTrace();
}
Thread.yield();
lbl.setForeground(new Color(51, 51, 51)); //Label wieder Standart färben
} // end of btn_ActionPerformed
// Ende Methoden
public static void main(String[] args) {
new Testgui("Testgui");
} // end of main
} // end of class Testgui
Ziel des Ganzen ist, dass nach einem Klick auf den Button das Label für 3 Sekunden lang rot leuchtet und dann wieder grau wird. So wie das Thread.sleep jetzt eingebracht ist, wartet die GUI auch brav drei Sekunden, aber ohne das Label vorher rot gefärbt zu haben.
Ich grübel jetzt schon etwas länger daran, aber in meinem konkreten Beispiel konnte ich es bisher noch nicht zum Laufen bringen, vielleicht kann mir ja jemand dabei helfen.
LG