Toon posts:

[Java] 3 karakters op 1 key press

Pagina: 1
Acties:

Onderwerpen


  • Preau
  • Registratie: oktober 2010
  • Niet online
Ik zit met een raar probleempje. Ik ben in Java een RPN (Reverse Polish Notation) calculator aan het maken als opdracht voor school. Ik heb nu de GUI helemaal af maar ik moest hem laten werken met het toetsenbord.
Op zich werkt alles, maar als ik 1 keer op een knop drukt registreert hij dat 3 keer.
Dus als ik 1 keer op 4 druk krijg ik 444.
Als ik 1 keer op * druk probeert hij 3 keer te vermenigvuldigen.

Het volgende staat in de constructor van de klasse
Java:
1
2
        KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
        kfm.addKeyEventDispatcher(new KeyEvents());


En dit is een interne klasse in dezelfde klasse als die van de constructor
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    private class KeyEvents implements KeyEventDispatcher{

        public boolean dispatchKeyEvent(KeyEvent e) {
            if(Character.isDigit(e.getKeyChar()) || e.getKeyChar() == '.' || e.getKeyChar() == '\n')
            {
                pnlNumberInput.keyPressed(e.getKeyChar());
                return true;
            }
            if(e.getKeyChar() == '+' || e.getKeyChar() == '-' || e.getKeyChar() == '*' || e.getKeyChar() == '/' || e.getKeyChar() == '^')
            {
                pnlOperators.keyPressed("" + e.getKeyChar());
                return true;
            }
            return false;
        }

    }


Na deze methode kan het in principe niet meer fout gaan omdat in de daarop volgende methodes ook het handmatig met de muis op knoppen drukken afgehandeld wordt en daar 1 keer drukken gewoon 1 keer is.

Ik heb al gezocht naar mensen met hetzelfde probleem maar kon niets vinden.

  • NMe
  • Registratie: februari 2004
  • Laatst online: 03:29

NMe

Quia Ego Sic Dico.

Krijg je niet toevallig een event voor key down, key press en key up? KeyEvent klinkt redelijk generiek. Let wel: ik ben niet zo bekend met Java dus ik denk hier alleen hardop. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Tiemez
  • Registratie: december 2003
  • Laatst online: 24-07 21:54
NMe schreef op donderdag 14 oktober 2010 @ 18:47:
Krijg je niet toevallig een event voor key down, key press en key up? KeyEvent klinkt redelijk generiek. Let wel: ik ben niet zo bekend met Java dus ik denk hier alleen hardop. ;)
klopt, je kan met getID() opvragen welk event
The getID method is inherited from the AWTEvent class. It returns the event type as a numeric value. For a KeyEvent, the event type is returned as a value of type int, which corresponds to one of the following three constants defined in the KeyEvent class:

* KEY_PRESSED
* KEY_RELEASED
* KEY_TYPED

  • Preau
  • Registratie: oktober 2010
  • Niet online
Ah, over het hoofd gezien, nu werkt het naar behoren. Thanks!

  • Infinitive
  • Registratie: maart 2001
  • Laatst online: 18-09 23:22
Aangezien dit een schoolopdracht is, heb ik nog wat advies voor je wat je al dan niet ten harte kunt nemen.

In zijn algemeenheid zou ik nog willen voorstellen om:
code:
1
char c = e.getKeyChar();

los te schrijven zodat je in de if-then-else expressies naar c kunt refereren, in plaats van iedere keer e.getKeyChar() voluit te schrijven.

Als alternatief voor de if-then-else's, zou je ook nog naar een switch-statement kunnen kijken.

Tot slot, vind ik het op eerste oogopslag vreemd dat je in pnlOperators.keyPressed naar een string converteert, terwijl je het bij pnlNumberInput.keyPressed bij een char laat. Misschien dat je dat nog wat consistenter kunt maken.

[Voor 9% gewijzigd door Infinitive op 14-10-2010 21:39]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]



Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee