2011-01-12 10 views
5

Ho una sottoclasse di JComboBox. Tento di aggiungere un listener di chiavi con il seguente codice.Rilevamento quando l'utente preme immettere Java

 

     addKeyListener(new KeyAdapter() 
     { 
      public void keyPressed(KeyEvent evt) 
      { 
       if(evt.getKeyCode() == KeyEvent.VK_ENTER) 
       { 
        System.out.println("Pressed"); 
       } 
      } 
     }); 
 

Ciò tuttavia non rileva correttamente quando l'utente preme un tasto. In realtà non è chiamato affatto. Sto aggiungendo questo ascoltatore sbagliato? Ci sono altri modi per aggiungerlo?

+0

prego ci mostra il codice completo, e si può sapere il motivo per cui il monitoraggio entrare stampa a combobox è necessaria? –

+0

la funzione non sembra avere un problema, forse il modo in cui la invochi ha qualcosa di sbagliato. Abbiamo bisogno di vedere più del codice –

+0

@ user489041, non dovresti usare un KeyListener per questo. – camickr

risposta

13

Gli eventi chiave non vengono generati sulla casella stessa, ma sul relativo editor. È necessario aggiungere il keyListener al direttore del JComboBox e non la casella direttamente:

comboBox.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() 
    { 
     public void keyPressed(KeyEvent evt) 
     { 
      if(evt.getKeyCode() == KeyEvent.VK_ENTER) 
      { 
       System.out.println("Pressed"); 
      } 
     } 
    }); 

Edit: chiamata di metodo fisso.

1

Questo NON è l'approccio corretto. L'editor di un JComboBox è un JTextField. Se si desidera gestire il tasto Invio, aggiungere un ActionListener al campo di testo.

Evitare sempre l'uso di KeyListeners.

Edit:

comboBox.getEditorComponent().addActionListener(...); 
+1

Sarebbe possibile fornire qualche esempio di codice? – user489041

+0

@ user489041, hai mai aggiunto un ActionListener a un JButton? Bene, il codice è esattamente lo stesso. Se non hai ancora letto la sezione dal tutorial di Swing su "Come scrivere un listener di azioni" (http://download.oracle.com/javase/tutorial/uiswing/TOC.html). – camickr

+0

È necessario comboBox.getEditor(). AddActionListener (...) – Alex

Problemi correlati