Avatar billede dennism Nybegynder
01. december 2006 - 10:44 Der er 15 kommentarer og
1 løsning

Java: Key Listener?

Jeg har kigget lidt på "how to write a key listener", men kan ikke helt gennemskue det.

Jeg er interesseret I, at når brugeren trykker enter så skal det svare til f.eks. at clicke på connectButton.

Med connectButton.doClick(); kan jeg foretage et klik, men problemet er bare, hvordan jeg opfanger hvornår brugeren trykker på ENTER?
Avatar billede winners79 Nybegynder
01. december 2006 - 10:59 #1
public class Klient extends JFrame implements KeyListener

................



public synchronized void keyPressed(KeyEvent e) {

if (e.getKeyCode() == KeyEvent.VK_ENTER)
connectButton.doClick();

}

public void keyTyped(KeyEvent e) {}

public void keyReleased(KeyEvent e) {
Avatar billede mikkelbm Nybegynder
01. december 2006 - 15:34 #2
Nogen grund til at din metode er synchronized?

Alt GUI kører i én og samme tråd, og kan derfor ikke blive invoked fra flere tråde.
Avatar billede mikkelbm Nybegynder
01. december 2006 - 16:16 #3
"og kan derfor ikke blive invoked fra flere tråde."

Forstået på den måde, at gui-event kun blive smidt fra gui-tråden, og det derfor ikke er nødvendigt med synchronize.

Det er selvfølgelig muligt at arbejde på gui'en fra flere forskellige tråde.
Avatar billede dennism Nybegynder
01. december 2006 - 16:40 #4
Er det ikke muligt at lave en løsning med inner-classes? Vil gerne have noget i stil med mine actionListeners:

createButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ev) {
                createGame();
            }
        });
Avatar billede dennism Nybegynder
01. december 2006 - 17:03 #5
Jeg har forsøgt noget i retningen af dette:

frame.addKeyListener(new KeyListener() {
           
            public void keyTyped(KeyEvent e) {
            }

            public void keyReleased(KeyEvent e) {   
            }
           
        });
Avatar billede dennism Nybegynder
01. december 2006 - 17:11 #6
Oki, jeg fik det til at fungere ved at smide denne på mit passwordFelt:

        passwordText.addKeyListener(new KeyListener() {
            public void keyTyped(KeyEvent e) { }

            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                    connectButton.doClick();
                }
            }

            public void keyReleased(KeyEvent e) { }           
        });

Men er jeg så nødt til at lave sådan én smørre for hver af mine buttons?
Avatar billede mikkelbm Nybegynder
01. december 2006 - 17:32 #7
Hver af dine buttons? Mener du hvert af dine textfields?
Avatar billede mikkelbm Nybegynder
01. december 2006 - 17:34 #8
Du kan undlade at lave anonyme klasser og i stedet lave én private class:

private class MyKeyListener extends KeyAdapter
{
  public void keyPressed(KeyEvent e)
  {
      if (e.getKeyCode() == KeyEvent.VK_ENTER)
      {
        connectButton.doClick();
      }
  }
}

...

KeyListener keyListener = new MyKeyListener();
textfield1.addKeyListener (keyListener);
textfield2.addKeyListener (keyListener);
textfield3.addKeyListener (keyListener);
textfield4.addKeyListener (keyListener);
// Osv...
Avatar billede dennism Nybegynder
01. december 2006 - 17:49 #9
Hvordan kan jeg lave et doClick på en button, som er i en anden klasse?
Avatar billede winners79 Nybegynder
01. december 2006 - 18:23 #10
Ja det er ikke meningen den skal være synchronized I det her eksempel.

Er fordi den er kopieret fra et spil :)
Avatar billede mikkelbm Nybegynder
01. december 2006 - 18:27 #11
Du kan enten gøre variablen public (ikke pænt).

Eller du kan lave en public metode i den klasse som gør det.
Avatar billede dennism Nybegynder
01. december 2006 - 18:30 #12
Tak, jeg arbejder videre på sagen ;)
Avatar billede dennism Nybegynder
01. december 2006 - 19:06 #13
Smider I lige et svar her? :)
Avatar billede mikkelbm Nybegynder
01. december 2006 - 19:11 #14
.
Avatar billede winners79 Nybegynder
01. december 2006 - 19:44 #15
Bare giv dem til mikkel, han har arbejdet mere for dem;)
Avatar billede dennism Nybegynder
01. december 2006 - 20:42 #16
Heh.. Anyways: Tak til jer begge!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester