# Eingabelänge eines Eingabefeldes?



## Doomrunner (22. Apr 2004)

Kann man die maximale Eingabelänge eines Textfeldes irgendwie angeben? Würde z.B. gerne sagen, dass ein bestimmtes Feld, das für die Eingabe eines Datums vorgesehen ist nur auf 2 Zeichen begrenzt ist etc.


----------



## Illuvatar (22. Apr 2004)

Dafür gibts die [schild=10 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]API[/schild]!

http://java.sun.com/j2se/1.4.2/docs/api/java/awt/TextField.html#TextField(int)
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/TextField.html#setColumns(int)


----------



## Doomrunner (22. Apr 2004)

Das habe ich ja versucht. Aber wenn ich das hier eingebe:


```
regtag = new javax.swing.JTextField(2);
```

Dann kann ich trotzdem noch mehr als 2 Zeichen in das Feld eingeben  ???:L


----------



## Illuvatar (22. Apr 2004)

Stimmt, du hast natürlich recht  

Dann weiß ich auch nichts mehr, was du nicht selbst schreiben müsstest.
(addInputMethodListener --> inputMethodTextChanged -->
	
	
	
	





```
if (tf.getText().length() > x)
  tf.setText(tf.getText.substring (0, tf.getText().length - 1));
```
)


----------



## Doomrunner (23. Apr 2004)

könntest du mir vielleicht einen Code posten, mit dem ich den Action Listener an das Feld hänge? Also so wie?


```
regtag.add...
```

Bekomme das einfach nicht hin...


----------



## Doomrunner (23. Apr 2004)

Eigentlich müsste es doch so gehen, oder?


```
regtagaddTextListener(new java.awt.event.TextListener() { 
    public void textValueChanged(java.awt.event.TextEvent evt) { 
        //
    } 
});
```

Dann bekomme ich aber folgende Fehlermeldung vom Compiler:

crssoftware/domainverwaltung.java [151:1] cannot resolve symbol
symbol  : method addTextListener (<anonymous java.awt.event.TextListener>)
location: class javax.swing.JTextField
        domain.addTextListener(new java.awt.event.TextListener() { 
              ^
1 error
Errors compiling domainverwaltung.


----------



## bygones (23. Apr 2004)

so mal hingehauen:

```
TextField f = new TextField();
		f.addTextListener(new TextListener() {

			public void textValueChanged(TextEvent e) {
				TextField f = (TextField)e.getSource();
				if(f.getText().length() > 2) {
					f.setText(f.getText().substring(0,2));
					f.setCaretPosition(f.getText().length());
				}
			}
		});
```


----------



## Doomrunner (23. Apr 2004)

Achso, das ging also nicht, da ich ein JTextField aus dem swing Paket genommen hatte.

Ist das mit dem nicht möglich?


----------



## bygones (23. Apr 2004)

achso, ich dachte du hast nur awt wg. dem listener:
mit swing ginge es so:

```
JTextField f = new JTextField();
		f.addKeyListener(new KeyAdapter() {

			public void keyReleased(KeyEvent e) {
				JTextField f = (JTextField)e.getSource();
				if(f.getText().length() > 2) {
					f.setText(f.getText().substring(0,2));
					f.setCaretPosition(f.getText().length());
				}
			}
		});
```


----------



## Illuvatar (23. Apr 2004)

So müsste es auch gehen: (hab mal deathbyaclowns Bsp. angepasst)


```
JTextField f = new JTextField(); 
      f.addInputMethodListener (new InputMethodListener() { 
         public void caretPositionChanged (InputMethodEvent e){/*nix*/}
         public void inputMethodTextChanged (InputMethodEvent e) { 
            JTextField f = (JTextField)e.getSource(); 
            if(f.getText().length() > 2) { 
               f.setText(f.getText().substring(0,2)); 
               f.setCaretPosition(f.getText().length()); 
            } 
         } 
      });
```


----------



## Doomrunner (24. Apr 2004)

funktioniert leider nicht... Der merkt erst gar nicht, dass der Text geändert wird...


----------



## Illuvatar (24. Apr 2004)

Doomrunner hat gesagt.:
			
		

> funktioniert leider nicht... Der merkt erst gar nicht, dass der Text geändert wird...


Welches? Das von deathbyaclown oder das von mir?
Wenn meins nicht funktioniert (ich habe den InputMethodListener noch nie ausprobiert) probier mal das von Deathbyaclown, das müsste meiner Meinung nach auf jeden Fall tun. (Das geht nicht nach Textänderungen, sondern nach Tastendrücken, also auch bei z.B. F12)


----------



## Doomrunner (24. Apr 2004)

Das von dir hat leider nicht funktioniert. Habe aber noch einige Zeit gegoogled und eine Klasse gefunden, die dir das ganze wunderbar abnimmt. Für die Leute, die es interessiert hier der Link:

http://javaalmanac.com/egs/javax.swing.text/LimitText.html


----------



## Grizzly (25. Apr 2004)

Wenn Du eine Änderung des Inhaltes eines JTextField's anzeigen lassen willst, musst Du das mit einem DocumentListener machen:

```
DocumentListener myListener = ??;
JTextField myArea = ??;
myArea.getDocument().addDocumentListener(myListener);
```
Siehe dazu auch:

JTextComponent.getDocument()
Document.addDocumentListener(javax.swing.event.DocumentListener)
DocumentListener


----------

