Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Allgemeine Java-Programmierung > KeyCodes von Umlauten?
Antwort
 
Themen-Optionen
Alt 12.12.2005, 19:41   Nach oben    #1
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard KeyCodes von Umlauten?

Äääähhhhmmm...

mir ist da etwas seltsames aufgefallen, und zwar hab ich ein Problem mit den Umlauten in einem KeyListener.
Es geht speziell um die folgenden Tasten der deutschen Tastatur:
ä ö ü

Bitte wie kann ich diese Tasten in einem KeyListener ansprechen? Ich möchte nämlich gerne darauf reagieren, aber ich habe keine Ahnung wie.
Anbei ein Beispielcode:

PHP-Code:
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("Event-Char: " e.getKeyChar());
        
System.out.println("Key Pressed = " e.getKeyCode());
    }

    public 
void keyReleased(KeyEvent e) {
        
System.out.println("Key Released = " e.getKeyCode());
        
System.out.println("Key Released (char) = " e.getKeyChar());
    }

    public 
void keyTyped(KeyEvent e) {
        
System.out.println("Key Typed = " e.getKeyChar());
    }

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


Das seltsame:
Bei den Tasten wird zwar die Methode keyReleased des Listeners ausgeführt, nicht jedoch keyPressed, die wird erst gar nicht angesprungen.
Fische ich aus dem keyReleased den keyCode ist dieser 0, keyChar enhällt aber den richtigen Buchstaben.
Wie mache ich ihm jetzt klar auch in die keyPressed-Methode zu springen?
Ihm beibringen diese Zeichen gesondert zu behaneln krieg ich schon hin, auch ohne keyCode, aber ohne Sprung in die Methode wirds schwer.

Gruß
Sparrow
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.12.2005, 10:09   Nach oben    #2
Murray
Benutzer
 
Registriert seit: 15.11.2005
Beiträge: 75
Standard

Hast Du es schon mit keyTyped() versucht?

Die Doku sagt:
Zitat:
"Key typed" events are higher-level and generally do not depend on the platform or keyboard layout. They are generated when a Unicode character is entered, and are the preferred way to find out about character input.
...
Zitat:
"Key pressed" and "key released" events are lower-level and depend on the platform and keyboard layout.
Murray ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.12.2005, 19:11   Nach oben    #3
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Ich habe das Testprogramm von oben nochmal geändert was die Ausgabe angeht.
Sieht jetzt so aus:

PHP-Code:
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();
    }


Die Ausgabe wenn ich 'a' drücke:
Code:
keyPressed: char: a
keyPressed: keyCode: 65
keyTyped: char: a
keyTyped: keyCode: 0
keyReleased: char: a
keyReleased: keyCode: 65
und die Ausgabe bei ö:
Code:
keyReleased: char: ö
keyReleased: keyCode: 0
Das seltsame.. ich dachte er feuert das keyReleased nur wenn ich die Taste wieder loslasse, aber bei allen Tasten wird das Event immer und immer wieder ausgelöst, egal wie lange ich die Taste drücke.

Ist aber irgendwie seltsam, das Event aus dem keyReleased zu bekommen.. fühlt sich nicht richtig an.


Gruß
Sparrow
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.12.2005, 20:45   Nach oben    #4
Murray
Benutzer
 
Registriert seit: 15.11.2005
Beiträge: 75
Standard

Komisch. Unter WinXP bekomme ich für a:

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

Und für ö:

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

Dass das ö auf der Konsole als % erscheint ist normal bzw. ein typisches Windows-Phänemen: DOS-Programme verwenden eine andere Code-Page als GUI-Applikationen. Das sieht man z.B. wenn man im Notepad (oder einen anderen, nicht unicode-fähigen ASCII-Editor) "äöü" speichern und sich die Datei auf der Konsole mit type ansieht: auch da wird das ö zum %
Murray ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
preg_match mit Umlauten schifti PHP-Programmierung 3 20.04.2006 02:36


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:24 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44