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
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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