Veröffentlicht 18. Februar 200916 j Hallo, Wie stelle ich es an, mehrere (gleiche) KeyEvents auseinander zu halten? Mir schwebt das Prinzip der ActionEvents vor, bei denen man dem Listener ja durch getActionCommand() eindeutig (und bestenfalls auch für den Leser verständlich) mitteilen kann, woher (von welchem Button z.B.) das Event gekommen ist. Bei KeyEvents ist mir nur bekannt: public void keyPressed( KeyEvent kev ) { if( kev.getKeyCode() == KeyEvent.VK_ENTER ) { // tue dies } if( kev.getKeyCode() == KeyEvent.VK_ESCAPE ) { // tue das } } Das bringt mir hier jedoch nichts. Ich hab auch mit getSource() und getClass() schon rumprobiert, aber erreiche nicht das, was ich will. Mein Listener soll letzten Endes eindeutig wissen, was er tun soll. Und das geht nur, wenn der "Absender" des Events identifiziert werden kann. Bitte um Ratschläge. Vielen Dank!
19. Februar 200916 j Wer ist denn der "Absender"? Das Textfeld? Dann ist getSource() schon das, was Du brauchst. Ansonsten musst Du einen KeyListener definieren, der an sich schon eine Unterscheidung in sich trägt (z.B. in Form eines Objektattributs, das auf die Quelle schließen lässt. Dann kannst Du den unterschiedlichen "Absendern" jeweils ihren speziellen KeyListener mitgeben, der dann nicht im KeyEvent nachschauen muss, wer der "Absender" ist. Beispiel (ungetestet, weil nur hier reingeschrieben): class ParameterizedKeyListener implements KeyListener { private int source; public ParameterizedKeyListener(int source) { this source = source; } public void keyXY(KeyEvent event) { // check source and react } } [...] texfield1.addKeyListener(new ParameterizedKeyListener(1)); textfield2.addKeyListener(new ParameterizedKeyListener(1)); [...] Ob Dein Absender jetzt durch eine Zahl wie bei mir oder durch irgendwas anderes identifiziert wird, musst Du selbst besser wissen, weil Du ja weißt, was Du mit der Information tun willst. Peter
19. Februar 200916 j wenn in getSource() das falsche drin steht, trägst Du das keypressed() nicht korrekt in die Componente ein. Willst Du eigentlich einen globalen KeyHandler programmieren? Ginge auch mit inline-class: this.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_HOME) { ... } else if (e.getKeyCode() == KeyEvent.VK_F5) ... } });
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.