PDA

View Full Version : [java] Gestione keyevent


Fire Fox II
27-02-2012, 14:45
Salve raga

ho creato una piccola applicazione tramite swing : una finestra con textfield e button... ora vorrei fare in modo che alla pressione del tasto asterisco venga effettuata una determinata operazione ma non ho successo...

Il codice usato è il seguente


this.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
if (evt.getKeyChar()==java.awt.event.KeyEvent.VK_ASTERISK) {
System.out.println("prova");
}//fine enter
}
});


Dove sbaglio?

PGI-Bis
27-02-2012, 15:17
Usa getKeyCode (getKeyCode() == KeyEvent.VK_ASTERISK) al posto di getKeyChar e "this" dev'essere il campo di testo.

altrimenti intercetta l'evento keyTyped e non il keyPressed, sempre sul campo di testo.

Poi che this debba essere il campo di testo dipende in verità dalla necessità che l'evento si attivi alla scrittura del * nel campo o semplicemente alla sua pressione ma non stiamo qui a scriverci un romanzo.

Fire Fox II
27-02-2012, 16:01
Ho usato la this in quanto vorrei che sia il programma a catturare l'evento non il textfield...

Praticamente io ho un pulsante "salva" che memorizza i contenuti dei vari textfield in un database... Vorrei che alla pressione dell'asterisco mi venga avviato il "salva"...

PGI-Bis
27-02-2012, 16:17
Se è una funzione da "tasto rapido" allora usi un KeyStroke e non un key listener. Che funziona come un key listener ma ascolta gli eventi prima che siano distribuiti ai diversi componenti.

KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_ASTERISK, 0);
Action saveAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
//da qui richiami il codice che esegue il salvataggio
}
};
InputMap inputMap = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(ks, "salva");
ActionMap actionMap = this.getActionMap();
actionMap.put("salva", saveAction);

"this" dev'essere un jcomponent (jframe va bene).

Nota che dopo puoi usare saveAction come "action" del pulsante salva.

Fire Fox II
27-02-2012, 19:15
Beh, ho il jframe che contiene 3 jpanel...

Il jframe non riconosce getInputMap e getActionMap :confused: , il jpanel si...
Però dal jpanel (uno dei 3 qualsiasi) non ottengo il risultato sperato...

PGI-Bis
27-02-2012, 20:06
Prova un po' ad usare VK_P anzichè VK_ASTERISK (cioè la p anzichè il *). L'asterisco in effetti non me lo prende...


Edit:

KeyStroke.getKeyStroke("shift PLUS")

per l'asterisco. In effetti è anche logico, nel senso che il keystroke non prende il carattere che sarebbe digitato ma la combinazione di tasti che devi premere per digitarlo.