# JTextField kurz blinken lassen



## ugh_bough_ (5. Jan 2005)

Hi.

Ich habe ne Frage zu Swing.

Wenn ich versuche ein JTextField kurz blinken zu lassen, indem ich die BGFarbe verstelle und dann wieder zurücksetze, sehe ich keinen Effekt. Ich hab gedacht , daß es vielleich zu schnell geht und hab einen Thread.sleep() dazwischen gemacht, was natürlich unsinn war, denn die ganze app wurde angehalten. aber dabei habe ich festgestellt, daß das JTF nicht neu gezeichnet wird, wenn es den befehl erhält, sondern erst später. zu merken daran, daß es erst nach dem thread.sleep() aufruf seine farbe ändert, und nicht schon vorher.

wie kann ich das JTF kurz zum blinken kriegen?

danke
ugh_bough


----------



## DesertFox (5. Jan 2005)

Wenn du die Änderungen aus einem Thread heraus aufrufst: Swing ist nicht Thread-Sicher!!!


----------



## ugh_bough_ (5. Jan 2005)

nein es gibt gar keine threads. ausser natürlich einen. das war nur so eine idee, um den farbwechsel zu verzögern...


----------



## Gast (5. Jan 2005)

warum willst du überhaupt nen jtextfield blinken lassen?


----------



## DP (5. Jan 2005)

er programmiert ein spiel auf swing-basis


----------



## ugh_bough_ (5. Jan 2005)

nein.
ich will einem user eine bestimmte eingabe in ein JTF verweigern. z.B. zahlen. Diese werden, wenn er sie eingibt nicht in das JTF geschrieben. Damit sich der user aber nicht wundert, ob vielleicht seine tastatur nicht funzt, soll das JTF rot blinken, von wegen "da lief was schief"
wer noch ideen hat, bitte bitte melden
danke
ugh_bough


----------



## Beni (5. Jan 2005)

Ich hab mal sowas gebaut, du kannst den Sourcecode gerne anschauen. 

Ein Textfeld, Interface , Klasse und Enumeration um das Teil auszuprobieren.

Der wichtige Teil des Codes ist der "Blinker", welcher das Textfield zum blinken bringt (hier nur ein bisschen Pseudocode):

```
/**
	 * Der Blinker sorgt dafür, dass der Hintergrund die Farbe wechselt
	 */
	private class Blinker implements ActionListener{
		private Timer timer = new Timer( 250, this );
		private boolean on = false;

		public Blinker(){
			timer.setInitialDelay( 100 );
		}

		public void start(){
			if( !timer.isRunning() )
				timer.restart();
		}

		public void stop(){
			timer.stop();
			if( on )
				actionPerformed( null );
		}

		public boolean isOn(){
			return on;
		}

		public void actionPerformed( ActionEvent e ) {
			synchronized( getTreeLock() ){
				if( on ){
					on = false;
					setBackground( background );
				}
				else{
					on = true;
					setBackground( Color.RED );
				}
			}
		}
	}
```


----------



## DP (5. Jan 2005)

da würde ich aber nichts blinken lassen. rot hinterlegt reicht schon... wird imho zu penetrant


----------



## ugh_bough_ (5. Jan 2005)

warum rot hinterlegen, wenn das was im feld steht doch richtig ist? die falschen eingaben kommen ja gar nicht an!
so braucht man sich nicht drum kümmern, das falsche wieder weg zu machen.
rot hinterlegt ist ein feld nur, wenn gar nichts drin steht. dann ist aber auch der wichtige "Start Knopf" augeschaltet.

@Beni danke, ich probiers mal aus


----------



## DP (5. Jan 2005)

jou, mach mal.

wenn du fertig bist, kannste das an schaustellerbetriebe mit los-buden vertickern


----------

