# DocumentListener uebergibt Objekt; wie in JTextfield casten?



## jakob (9. Jun 2006)

Hallo zusammen, 

ich habe mehrere JTextfields in meiner Application. Wenn der Wert eines der Textfelder geaendert wird, soll die Hintergrundgarbe desjenigen Felds rot sein.

Ueber einen implementierten DocumentListener finde ich heraus wann ein Textfeldwert geaendert wurde:


```
//Textfeld erstellen
private JTextField getTextfield(String wert, int laenge, String nameDesTextfelds) {
        JTextField t = new JTextField(wert, laenge);
        t.getDocument().addDocumentListener( this );
        t.getDocument().putProperty("name", nameDesTextfelds);
        return t;
    }
    
// Uebernommene Methoden des DocumentListeners
    public void insertUpdate(DocumentEvent e) {
        updateLog(e);
    }
    public void removeUpdate(DocumentEvent e) {
        updateLog(e);
    }
    public void changedUpdate(DocumentEvent e) {
        updateLog(e);
    }


// Diese Methode wird von den oben uebernommen aufgerufen. Das Problem ist hier, dass ich doc.getProperty("name") als Objekt bekomme und deshalb kein setBackgroud anwenden kann.
     public void updateLog(DocumentEvent e) {
         Document doc = (Document)e.getDocument();
        System.out.println(doc.getProperty("name"));
        doc.getProperty("name").setBackground(Color.RED);
    }
```

Fehlermeldung:
Die Methode setBackground(Color) ist für den Typ Object nicht definiert (undefined)

Kann jemand helfen?

Danke und Liebe Gruesse,

Jakob


----------



## André Uhres (9. Jun 2006)

jakob hat gesagt.:
			
		

> ..ich habe mehrere JTextfields in meiner Application.
> Wenn der Wert eines der Textfelder geaendert wird, soll die Hintergrundgarbe desjenigen Felds rot sein.




```
/* 
* DocumentTest.java 
*/ 
//package schnipsel3; 
import java.awt.*; 
import java.util.*;
import javax.swing.*; 
import javax.swing.event.*; 
import javax.swing.text.*; 
public class DocumentTest extends JFrame implements DocumentListener{ 
    public DocumentTest() { 
        super("Document Test"); 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        setSize(400, 300); 
        setLocationRelativeTo(null); 
        getContentPane().setLayout(new FlowLayout()); 
        t1 = getTextfield("t1", 10, "t1"); 
        t2 = getTextfield("t2", 10, "t2"); 
        add(t1); 
        add(t2); 
    } 
    private JTextField getTextfield(String wert, int laenge, String nameDesTextfelds) { 
        JTextField t = new JTextField(wert, laenge); 
        t.getDocument().addDocumentListener( this ); 
        t.getDocument().putProperty("name", nameDesTextfelds); 
        textfelder.put(nameDesTextfelds, t);
        return t; 
    } 
    public void insertUpdate(DocumentEvent e) {updateLog(e);} 
    public void removeUpdate(DocumentEvent e) {updateLog(e);} 
    public void changedUpdate(DocumentEvent e){updateLog(e);} 
    public void updateLog(DocumentEvent e) { 
        Document doc = (Document)e.getDocument(); 
        String name = (String)doc.getProperty("name"); 
        textfelder.get(name).setBackground(Color.red); 
    } 
    public static void main(String args[]) {new DocumentTest().setVisible(true);} 
    private JTextField t1, t2; 
    private Map<String, JTextField> textfelder = new HashMap<String, JTextField>();
}
```


----------



## jakob (10. Jun 2006)

Hi Andre, 

danke fuer die Hilfe, jetzt geht's!   

Was ist eigentlich der Unterschied zwischen Map und HashMap?

Liebe Gruesse,

Jakob


----------



## André Uhres (10. Jun 2006)

jakob hat gesagt.:
			
		

> ..Was ist eigentlich der Unterschied zwischen Map und HashMap?..


HashMap *ist *eine Map.  Das heisst HashMap implementiert das _Interface _Map.
Map ist sozusagen der Oberbegriff. TreeMap ist auch eine Map. Du kannst also im obigen Programm
HashMap durch TreeMap ersetzen und es wird immer noch funktionieren weil das Programm keine
bestimmte Implementation verlangt: das Interface Map muss einfach nur irgendwie implementiert sein.


----------

