Jeg har et spørgsmål, angående om det er muligt at lave en eller anden form for listener, der står og looper hele tiden i ens program. Hvis man så trykker f.eks. "P" på sit tastetur, så skal programmet gå i en anden tilstand, f.eks. pause-tilstand...
Altså om det er muligt at stå og "lytte" på tasteturet og opfange, hvis man f.eks. trykker P....?
KeyListener og KeyAdapter er 2 sider af samme sag. implementerer du listeneren skal du implementere alle tre metoder, mens med en extension af adaptoren kan du nøjes med de metoder du er mest interesseret i.
eksempel med adaptoren: public class a extends KeyAdapter {
public void keyReleased(KeyEvent arg0) { if (arg0.getKeyCode() == KeyEvent.VK_P) { // hvad skal der ske? } } }
eksempel med listeneren: public class b implements KeyListener {
public void keyTyped(KeyEvent arg0) {
}
public void keyPressed(KeyEvent arg0) {
}
public void keyReleased(KeyEvent arg0) { if (arg0.getKeyCode() == KeyEvent.VK_P) { // hvad skal der ske? } } }
det smarte ved adaptoren er blot at vi sparer de to ekstra metoder væk, hvilket giver et bedre overblik og mindre forvirring.
hvis du har en tekstbox eksempelvis du vil have til at lytte efter tastetryk på p, så skriver du bare:
JTextField text = new JTextField(); text.addKeyListener(a / b); alt efter hvilken løsning du kan lide
Helt enig med dbangx, adaptoren er der for at spare dig for at implementere nogle metoder som du nok alligevel ikke får brug for. Dog ville jeg nok have anvendt annonyme klasser istedet for at lave en klasse.
Lige et sidste "dummy" spørgsmål. Det er ikke muligt at lytte efter tastetryk uden at have f.eks. et JTextField eller noget lign.? Gruden er at jeg ikke har noget som helst GUI, men kun et dos-vindue hvor mit program kører?
Det er fordi jeg roder lidt med at lave et simpelt skak program, og der benytter jeg java's Robot klasse til at flytte musen rundt på skærmen, men når musen hele tiden bliver flyttet, ville det være rart hvis man kunne lytte efter et bestemt tastetryk, så jeg kunne få programmet til stadig at køre, men ikke flytte med musen f.eks...
Ja det er i mange tilfælde godt, men framen opfanger ikke tastetrykkene, da framen ikke har den primære focus. Det er det component der har focus, der fyrer sin events af til sin keylistener, ikke framen. Det vil sige at hvis du har bare fem componenter på skærmen, der kan have focus, så skal du skrive den samme kode 5 gange, det var derfor jeg lavede det som en klasse.
Hvis man gerne vil holde det samlet så kan du lave den som en nested klasse.
public class Keytest { public static void main(String... args) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.addKeyListener(new a()); frame.setVisible(true); } } private class a extends KeyAdapter{ public void keyPressed(KeyEvent e) { System.out.println("Du trykkede på "+e.getKeyChar()); }
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.