# Tasten mit Umlauten im KeyListener verhalten sich seltsam



## sparrow (11. Jan 2006)

Hallo Forum,

ich habe folgendes großes Problem:

Ich entwickele für eine Anwendung eine eigene GUI.
Das ganze Fust auf einem Window und der Rest wird entsprechend selbst umgesetzt.

Um Eingaben in meinen Feldern tätigen zu können nutze ich einen KeyListener ... dummerweise hat der Schwierigkeiten mit den deutschen Tasten auf denen die Umlaute liegen (also ä, ö und ü).
Mein Ansatz der GUI fußt darauf, dass ich den KeyCode interpretiere der mir vom Listener gegeben wird. Aber eben diese Tasten verhalten sich absolut daneben. Weder senden sie einen richtigen KeyCode, noch werden alle Methoden des Listeners aufgerufen, noch ist das Verhalten unter verschiedenen Betriebssystemen gleich.

Ich habe hier mal einen Beispielcode der mein Problem zeigt:


```
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class GermanKey extends Frame implements KeyListener {

    TextField    textField;

    public GermanKey() {
        super("Test German Key");

        textField = new TextField("Test German Key");
        textField.addKeyListener(this);

        add(textField);

        pack();

        setLocationRelativeTo(null);
        setVisible(true);
    }

    public void keyPressed(KeyEvent e) {
        System.out.println("keyPressed: char: " + e.getKeyChar());
        System.out.println("keyPressed: keyCode: " + e.getKeyCode());
    }

    public void keyReleased(KeyEvent e) {
        System.out.println("keyReleased: char: " + e.getKeyChar());
        System.out.println("keyReleased: keyCode: " + e.getKeyCode());
    }

    public void keyTyped(KeyEvent e) {
        System.out.println("keyTyped: char: " + e.getKeyChar());
        System.out.println("keyTyped: keyCode: " + e.getKeyCode());
    }

    public static void main(String[] args) {
        new GermanKey();
    }

}
```


Wenn man in dem Textfeld das dann erscheint tippt komtm folgende Ausgabe (ich tipp erst a, dann ö)

*unter Linux*

```
keyPressed: char: a
keyPressed: keyCode: 65
keyTyped: char: a
keyTyped: keyCode: 0
keyReleased: char: a
keyReleased: keyCode: 65

keyReleased: char: ö
keyReleased: keyCode: 0
```

und unter Windows XP:

```
Event-Char: a
Key Pressed = 65
Key Typed = a
Key Released = 65
Key Released (char) = a

Event-Char: ÷
Key Pressed = 0
Key Typed = ÷
Key Released = 0
Key Released (char) = ÷
```


Kann mir jemand sagen wie ich dem KeyListener das Verhalten austreibe?


Danke!


Sparrow


----------



## Roar (12. Jan 2006)

*doofguck* welches böse verhalten denn? ist doch alles richtig.
als keyCode kommt 0 zurück, weil keiner spezifiziert ist für äöü.
und getKeyChar() liefert doch auch das richtige zurück, die windows konsole kann das zeichen nur nicht darstellen.


----------



## sparrow (12. Jan 2006)

Ok, ohne KeyCode könnte ich leben.. wobei mit natürlich schöner wäre.

Aber was ist mit den Methoden die offensichtlich unter Linux nicht richtig angesprungen werden?

Gruß
Sparrow


----------



## Roar (12. Jan 2006)

sparrow hat gesagt.:
			
		

> Aber was ist mit den Methoden die offensichtlich unter Linux nicht richtig angesprungen werden?


meinst du damit keyPressed() und keyTyped() werden nicht aufgerufen? wenn ja liegt das an deinem X oder deinem window manager, die machen gerne schonmal was anderes als die dokumentation erwartet, aber keyReleased() wird ja schile´lich korrekt ausgeführt


----------



## sparrow (21. Feb 2006)

So, ich greif das Thema einfach nochmal auf.
Hab jetzt knapp einen Momant gedocktert, und es liegt definitiv weder an meinem X-Server noch an dem verwendeten Desktop-Environment.
Das Ergebnis ist unter allen getesteten Linux-Modellen gleich, keyPressed() und keyTyped() werden nicht angesprungen. Ich habe das ganze unter GNOME, KDE und WindowMaker probiert.
Außerdem unter XFREE und X.ORG.

Es muß doch eine Möglichkeit geben einen KeyListener zu registrieren mit dem ich an die allgemeingültigen Zeichen komme, oder? Irgendwie muß ein normales Textfeld das ja auch können.


Gruß
Sparrow


----------

