Hallo Gemeinde..
Ich habe ein modifiziertes JTextField
es hat 3 Zustände..
-->Es ist mit einem Filler (das ist ein Wort welches den Inhalt des Textfeldes angeben soll.. z.B. "Vorname") gefüllt, immer dann wenn der User noch nichts eigegeben hat und das Textfeld nicht angeklickt oder fokussiert ist.
-->Es ist leer (immer dann, wenn vorher ein Filler drin war und der User des Textfeld anklickt)
-->Es enthält die Eingabe des Users
Soweit funktionierte es alles bisher perfekt..
nun fülle ich aber das Textfeld z.B. über einen Button-Klick, also mit setText()..
Damit ich den Filler aus dem Textfeld bekomme, habe ich jetzt einen DocumentListener dazugefügt..
nur ist es so das er mir immer wieder eine java.lang.IllegalStateException: gibt, auf die Zeile
Was mache verkehrt?
Ich habe ein modifiziertes JTextField
es hat 3 Zustände..
-->Es ist mit einem Filler (das ist ein Wort welches den Inhalt des Textfeldes angeben soll.. z.B. "Vorname") gefüllt, immer dann wenn der User noch nichts eigegeben hat und das Textfeld nicht angeklickt oder fokussiert ist.
-->Es ist leer (immer dann, wenn vorher ein Filler drin war und der User des Textfeld anklickt)
-->Es enthält die Eingabe des Users
Soweit funktionierte es alles bisher perfekt..
nun fülle ich aber das Textfeld z.B. über einen Button-Klick, also mit setText()..
Damit ich den Filler aus dem Textfeld bekomme, habe ich jetzt einen DocumentListener dazugefügt..
nur ist es so das er mir immer wieder eine java.lang.IllegalStateException: gibt, auf die Zeile
Java:
this.getDocument().insertString(0, temp2, null);
Was mache verkehrt?
Java:
package mycomponents;
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 javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
public class PrefilledTextfield extends JTextField implements KeyListener, FocusListener, DocumentListener{
private static final long serialVersionUID = -4097497720861918161L;
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);
getDocument().addDocumentListener(this);
}
public String getFiller(){
return filler;
}
public void setFiller(String filler){
this.filler = filler;
}
public void reset(){
setText(filler);
setForeground(Color.LIGHT_GRAY);
setCaretPosition(0);
}
public boolean dataEntryOccured(){
if((getText().equalsIgnoreCase(getFiller()))||(getText().equalsIgnoreCase(""))){
return false;
}else{
return true;
}
}
@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);
this.setCaretPosition(0);
}
}
@Override
public void changedUpdate(DocumentEvent e) {
System.out.println("Change");
}
@Override
public void insertUpdate(DocumentEvent e) {
System.out.println("Insert");
String temp = this.getText();
System.out.println("Überprüft ob Daten eingetragen wurden");
if(this.dataEntryOccured()){
System.out.println("Schriftfarbe wird geändert");
this.setForeground(Color.BLACK);
System.out.println("Überprüft ob Inhalt mit Filler anfängt");
if(temp.startsWith(this.getFiller())){
System.out.println(temp);
String temp2 = temp.substring(this.getFiller().length());
System.out.println(temp2);
try {
this.getDocument().insertString(0, temp2, null);
} catch (BadLocationException e1) {
System.out.println("Hier ist der Fehler");
e1.printStackTrace();
}
//this.setText(temp2);
}
}
}
@Override
public void removeUpdate(DocumentEvent e) {
System.out.println("remove");
}
}