dejanV Skrevet 12. oktober 2009 Del Skrevet 12. oktober 2009 (endret) Sitter her og prøver å gjøre ferdig et spillprosjekt der jeg har bruk for KeyListener. Problemet er bare at absolutt ingenting skjer . Er ikke det riktig gjort å implementere på følgende måte? Her er et lite utdrag fra koden: public class Canvas extends JFrame implements KeyListener { public Canvas() { //kode.............. [b]addKeyListener(this);[/b] } public void keyTyped(KeyEvent e) { System.out.println("test1"); } public void keyPressed(KeyEvent e) { System.out.println("test2"); } public void keyReleased(KeyEvent e) { System.out.println("test3"); } } Kanskje verdt å nevne at jeg også bruker en anonym privat klasse som implementerer ActionListener inni Canvas. Kan denne ha noe med dette å gjøre? Endret 12. oktober 2009 av dejanV Lenke til kommentar
Cyberfrog Skrevet 13. oktober 2009 Del Skrevet 13. oktober 2009 Resten av koden, sørger den for at denne JFrame-en blir vist? Koden nedenfor er ikke mer meningsfull, men keylistener-metodene funker. import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; public class Canvas extends JFrame implements KeyListener { public Canvas() { //kode.............. addKeyListener(this); } public void keyTyped(KeyEvent e) { System.out.println("test1"); } public void keyPressed(KeyEvent e) { System.out.println("test2"); } public void keyReleased(KeyEvent e) { System.out.println("test3"); } public static void main(String[] args) { Canvas c = new Canvas(); c.setDefaultCloseOperation(DISPOSE_ON_CLOSE); c.setVisible(true); } } Lenke til kommentar
dejanV Skrevet 13. oktober 2009 Forfatter Del Skrevet 13. oktober 2009 Ja, den ser mer eller mindre identisk ut. Kan jo lime inn hele kildekoden hvis ingen har en løsning. Skjønner ikke hvorfor den ikke reagerer. Lenke til kommentar
HV Skrevet 14. oktober 2009 Del Skrevet 14. oktober 2009 Problemet ditt er: "//kode.............." Jeg aner ikke hva slags tull du har her, men det er garantert en eller annen component som tar fokuset bort fra JFrame. I eksemplet over er det ikke noe content, så det er ingen som stjeler fokusen din, altså den virker. Alternativ måte å få dette til samtidig som du ignorerer fokus aspektet: getRootPane().registerKeyboardAction(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Tadaa!"); } }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); Men jeg antar at dette ikke er bra nok og er ute etter pressed of released eventene til dette kinetiske prosjektet ditt, så jeg foreslår: public Canvas() { //kode.............. KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KineticKeyEventDispatcher()); } private final static class KineticKeyEventDispatcher implements KeyEventDispatcher { private static char c; private static long time; private static boolean released = true; @Override public boolean dispatchKeyEvent(final KeyEvent e) { if (e.getID() == KeyEvent.KEY_PRESSED) { if (released) { released = false; c = e.getKeyChar(); time = System.currentTimeMillis(); } } else if (e.getID() == KeyEvent.KEY_RELEASED) { if (!released && c == e.getKeyChar()) { released = true; System.out.println("Key " + c + " pressed for " + (System.currentTimeMillis() - time) + "ms"); } } return false; } } Eksempel: Key t pressed for 88ms Key a pressed for 73ms Key d pressed for 80ms Key a pressed for 48ms Key a pressed for 48ms Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå