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?
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
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) {
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.
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.
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(); } });
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) { } });
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?
01. december 2006 - 17:32
#7
Hver af dine buttons? Mener du hvert af dine textfields?
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...
01. december 2006 - 17:49
#9
Hvordan kan jeg lave et doClick på en button, som er i en anden klasse?
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 :)
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.
01. december 2006 - 18:30
#12
Tak, jeg arbejder videre på sagen ;)
01. december 2006 - 19:06
#13
Smider I lige et svar her? :)
01. december 2006 - 19:11
#14
.
01. december 2006 - 19:44
#15
Bare giv dem til mikkel, han har arbejdet mere for dem;)
01. december 2006 - 20:42
#16
Heh.. Anyways: Tak til jer begge!
Kurser inden for grundlæggende programmering