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?
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"...
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...
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.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.