# JTextField Default Text



## Stinner (8. Sep 2009)

Hallo,
ich suche eine Lösung für ein Default Text in einem JTextField.
Ich habe ein Suchfeld und möchte Standardmäßig den Text
"Hier Suchwort eingeben" anzeigen lassen.

Habe folgende Lösung bereits,
ich schriebe den Text mit setText in das Textfeld und immer beim FocusGained Event mache ich ein SelectAll.

Allerdings ist das nicht ganz befriedigend. Wenn nämlich jmd auf den Suchbutton drückt ohne was am Text zu ändern, ist mein Suchstring "Hier Suchwort eingeben". Hättte aber gerne, dass der String dann leer ist.


Gibt es da keine Standardfunktion für solch einen Hint? Habe in der API nix gefunden.

Gruß, Stinner


----------



## eRaaaa (8. Sep 2009)

hmm..was hindert dich denn daran, bei der action den string mittels equals mit deinem standarttext zu vergleichen? und nur wenn der nicht deinem defaulttext entspricht, machst du die suche?!

if(!"Hier Suchwort eingeben".equals(suchfeld.getText()){
..
}
oder noch besser auch gleich noch auf leere eingabe überprüfen ...

ps.: (man kann dem konstruktor auch schon einen defaultstring übergeben ;D
JTextField suchfeld = new JTextField("Hier Suchwort eingeben")


----------



## Stinner (8. Sep 2009)

Ja, 
vergleiche das ja momentan auch. Habe auch fast das verhalten fertig, aber es müsste da doch eine Standard Lösung geben.

Hatte letztens eine Applikation, da war es genauso wie es ich es wollte. D.h. wenn man ins Textfeld ist, war der Text sofort weg, wenn man wieder raus ist, war der Standardtext wieder da usw.

P.S. So mache ich es natürlich auch, wollte nur zeigen, welches Attribut ich momentan verwende um den Text anzuzeigen und das wird bei setText klar. ;-)


----------



## Verjigorm (8. Sep 2009)

Stinner hat gesagt.:


> Ja,
> vergleiche das ja momentan auch. Habe auch fast das verhalten fertig, aber es müsste da doch eine Standard Lösung geben.
> 
> Hatte letztens eine Applikation, da war es genauso wie es ich es wollte. D.h. wenn man ins Textfeld ist, war der Text sofort weg, wenn man wieder raus ist, war der Standardtext wieder da usw.
> ...



einfach einen Focuslistener anhängen und focusGained und focusLost überschreiben


----------



## Enigma228 (8. Sep 2009)

Meine Lösung:

```
package view;

import java.awt.Color;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;

import javax.swing.JTextField;

public class PrefilledTextfield extends JTextField implements KeyListener, FocusListener{
	private String filler;
	private Color user_yellow;
	
	public PrefilledTextfield(String filler){
		user_yellow = new Color(255,255,215);
		
		this.filler = filler;
		this.setText(filler);
		this.setForeground(Color.LIGHT_GRAY);
		this.setBackground(user_yellow);
		this.setToolTipText("Hier bitte "+getFiller()+" eingeben.");
		
		
		addKeyListener(this);
		addFocusListener(this);
	}
	public String getFiller(){
		return filler;
	}
	
	public void reset(){
		setText(filler);
		setForeground(Color.LIGHT_GRAY);
		setCaretPosition(0);
	}
	
	@Override
	public void keyPressed(KeyEvent arg0) {
		if(getText().equals(filler)){
			setText("");
			this.setForeground(Color.BLACK);
		}
		
	}
	@Override
	public void keyReleased(KeyEvent arg0) {
		if(getText().equals("")){
			setText(filler);
			setForeground(Color.LIGHT_GRAY);
			setCaretPosition(0);
		}
	}
	@Override
	public void keyTyped(KeyEvent arg0) {
	}
	
	@Override
	public void focusGained(FocusEvent arg0) {
		if(getText().equals(filler)){
			setText("");
			this.setForeground(Color.BLACK);
		}
		
	}
	@Override
	public void focusLost(FocusEvent arg0) {
		if(getText().equals("")){
			setText(filler);
			this.setForeground(Color.LIGHT_GRAY);
		}
	}
	
}
```


----------



## Stinner (8. Sep 2009)

Ja, danke. 
Thread kann geschlossen werden. Hatte mir jetzt auch eine eigene Lösung gemacht.

Dachte halt es gibt es als Default Funktion. Musste mir jetzt schon eigene Textfields bauen für einen StandardText und dafür, dass die Eingabe begrenzt wird.

Finde das sind beides Sachen, die das JTextField standardmäßig können müsste...naja.
Gruß


----------

