Wie kann ich die ^ Taste blockieren????



  • Hallo,

    ich entwickle Software für mobile Handgeräte.

    Wir müssen leider JDK 1.1.X einsetzen!
    Diese JDK Version unterstützt leider die Konstante KeyEvent.VK_CIRCUMFLEX
    ( das “ ^ “ Zeichen) nicht!!
    Dieses JDK unterstützt nur die keyPressed Methode!!

    Ich habe folgendes Problem:

    Wie kann ich in der Methode keyPressed das Zeichen “ ^ “ abfangen bzw. verhindern??

    Wir haben Felder mit Validierungen wie z.B. ein TextField blabla darf nur Zahlen akzeptieren aber keine Buchstaben. Man kann ganz einfach dieser Validierung verletzten, indem man zuerst die Taste
    “ ^ ° “ neben die Taste 1 drückt und wieder lost lässt, dann einer Buchstabe eingibt nanu !!!
    Wenn man vorher das Dachzeichen ^ eingibt, dann kann man plötzlich auch Buchstaben eingeben!!

    Hier ist der Code, aber er funktioniert leider nicht!!!

    public void keyPressed(KeyEvent e)
    {
    if ((e.getKeyChar() == '^') || (e.getKeyChar() == '°'))
    {
    e.consume();
    }
    }

    Was muss ich noch tun??

    Vielen Dank im Voraus 🙂



  • warum macht ihr nicht ne abfrage, ob es eine Zahl ist oder nicht?
    also sowas wie:

    char x = e.getKeyChar();
    if( x >= '0' && x <= '9'){
     tu.etwas();
    }
    else{
      lass.es.lieber();
    }
    

    PS:
    Ich such für die Sommersemesterferien noch ein Praktikum...
    Wenn jemand also ne Firma kennt, am besten im Raum HH... 🙂

    PPS: mist CengizS war mal wieder schneller

    [ Dieser Beitrag wurde am 14.01.2003 um 13:31 Uhr von Ingo aka Desert Hawk editiert. ]

    [ Dieser Beitrag wurde am 14.01.2003 um 13:32 Uhr von Ingo aka Desert Hawk editiert. ]



  • Prüfe doch einfach ob es eine Zahl ist ... nicht ob es keine Zahl ist 😉
    Die Klasse java.lang.Character hat eine statische Methode mit der man prüfen kann, ob ein char eine Ziffer darstellt.[java]public static boolean isDigit(char ch)[/code]



  • Original erstellt von Ingo aka Desert Hawk:
    **warum macht ihr nicht ne abfrage, ob es eine Zahl ist oder nicht?
    also sowas wie:

    char x = e.getKeyChar();
    if( x>='0' && x <= '9'){
     tu.etwas();
    }
    else{
      lass.es.lieber();
    }
    

    **

    Das reicht leider nicht ... denn
    A character is considered to be a digit if it is not in the range '\u2000' <= ch <= '\u2FFF' and its Unicode name contains the word "DIGIT". For a more complete specification that encompasses all Unicode characters that are defined as digits, see Gosling, Joy, and Steele, The Java Language Specification.

    [ Dieser Beitrag wurde am 14.01.2003 um 13:32 Uhr von CengizS editiert. ]



  • Ok ok,
    hast ja recht... (mal wieder 😃 )
    Aber mein Ansatz ging ja schon mal in die richtige Richtung 🙂
    *selbstaufschulterklopf*



  • Hi,

    wir haben schon ein Interface, welches nur die Eingaben von Zahlen erlaubt!

    Es geht nur darum, dass man die ^ Taste blockiert!!

    Wir haben z.B. ein TextField blabla, das nur 3stellig ist. Wenn ich vorher die ^ Taste drücke und wieder los lasse, dann kann mehr eingeben als erlaubt ist!!

    Z.B. ich gebe ein 123 anschliessend drücke ich die ^ Taste und lasse wieder los,
    jetzt verletze ich unserer Validierung und kann nun ein Zeichen mehr eingeben.
    Wenn ich jetzt noch ein Zeichen eingeben will, dann muss ich nur die ^ Taste drücken und wieder los lassen, dann ein beliebiges Zeichen eingeben!!!!

    Gruss Reza 🙂



  • Versuch auf char(514) zu gucken

    [java]public static final int VK_CIRCUMFLEX = 514;[/code]



  • Hallo,

    ich habe eine tricky Lösung ;-))

    Es war nicht so einfach wie alle gedacht haben!

    Codefragment:

    public void keyPressed(KeyEvent e)
    {
    doIt(e);
    }

    public void keyTyped(KeyEvent e)
    {
    doIt(e);
    }

    public void doIt(KeyEvent e)
    {
    if ((e.getKeyCode() == KeyEvent.VK_BACK_SPACE) || (e.getKeyChar() == (char) KeyEvent.VK_BACK_SPACE))
    {
    return;
    }

    // Hier wird unter anderem die Anzahl der eingebbaren Zeichen beschränk

    if (!isAllowedChar(e.getKeyChar()) || (TextField.class.isInstance(e.getSource())
    && (((TextField) e.getSource()).getText().length() >= _maxColumns)))
    {
    e.consume();
    }
    }

    public boolean isAllowedChar(char ch)
    {
    return ((ch != '^') && (ch != '°'));
    }


Anmelden zum Antworten