View Full Version : [JAVA-Swing]Non trovo una funzione per un JButton..
!@ndre@!
17-07-2008, 15:37
Ciao ragazzi!!
Praticamente io ho una finestra con un unico JButton e vorrei che, quando la finestra è selezionata, se premo INVIO quel JButton venga premuto.
Ho provato a dare un'occhiata alle API ma non sono riuscito a trovare niente: il metodo che più si avvicina è "void setMnemonic (KeyEvent)" che funziona come dico io solo che devo premere ALT+INVIO e non solamente INVIO come vorrei io!!
...qualcuno conosce un metodo per fare come voglio io??
grazie mille a tutti quelli che troveranno il tempo per aiutarmi!!:D
Oceans11
17-07-2008, 15:58
devi implementare l'interfaccia java.awt.event.KeyListener e poi:
...
tuoPulsante.addKeyListener(this);
....
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
// fai quello che devi
}
banryu79
17-07-2008, 16:01
Scusami Oceans11, ma il sitema che hai suggerito dovrebbe funzionare solo se il JButton ha il focus nel momento in cui premi "Invio", giusto?
Oceans11
17-07-2008, 16:05
Scusami Oceans11, ma il sitema che hai suggerito dovrebbe funzionare solo se il JButton ha il focus nel momento in cui premi "Invio", giusto?
si hai ragione...però dice che la finestra ha solo un JButton, è plausibile che abbia il focus no? Tra l'altro si potrebbe forzare il focus a quel pulsante.
Se invece c'è qualche altro componente, tipo un'area di testo dove scrivere e poi premere invio, allora il pulsante neanche serve, basta far implementare KeyListener dall'area di testo stessa. Giusto?
!@ndre@!
17-07-2008, 16:06
Scusami Oceans11, ma il sitema che hai suggerito dovrebbe funzionare solo se il JButton ha il focus nel momento in cui premi "Invio", giusto?
..mi accodo alla domanda...perchè il focus l'ho posizionato in un JTextField per comodità e non vorrei doverlo spostare....
..intanto grazie della risposta!!
!@ndre@!
17-07-2008, 16:08
si hai ragione...però dice che la finestra ha solo un JButton, è plausibile che abbia il focus no? Tra l'altro si potrebbe forzare il focus a quel pulsante.
Se invece c'è qualche altro componente, tipo un'area di testo dove scrivere e poi premere invio, allora il pulsante neanche serve, basta far implementare KeyListener dall'area di testo stessa. Giusto?
.ah...interessante........:D
Oceans11
17-07-2008, 16:16
allora ho indovinato....:D che :ciapet:
// classe che implementa KeyListener
JTextField textField = new JTextField(15);
textField.addKeyListener(this);
/*
* KEY LISTENER per il text field
*/
public void keyPressed(KeyEvent e) {
if (textField.getText().length() > 0) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
// metti qui quello che ti serve
}
}
}
!@ndre@!
17-07-2008, 16:17
GRAZIEEE!! ho risolto aggiungendo un ActionListener al JTextField e invocando il doClick() sul JButton in questione!!;)
banryu79
17-07-2008, 17:01
Tra l'altro si potrebbe forzare il focus a quel pulsante.
Potrebbe essere una soluzione, se per esempio non si ha un JTextField che riceve il focus all'apertura del frame (come infatti hai suggerito).
Un'altra soluzione che ho trovato e sperimentato (con risultati positivi) è quella di intercettare direttamente gli eventi generati dalla tastiera e diretti al KeyboardFocusManager prima che lui li smisti al componente "in focus" (per esempio appunto per settare a livello "globale" di un JFrame che può avere molti sottocomponenti un evento da tastiera non localizzato su un particolare componente)
Vedi il link (http://www.hwupgrade.it/forum/showthread.php?t=1774047)
Oceans11
17-07-2008, 17:08
Un'altra soluzione che ho trovato e sperimentato (con risultati positivi) è quella di intercettare direttamente gli eventi generati dalla tastiera e diretti al KeyboardFocusManager prima che lui li smisti al componente "in focus" (per esempio appunto per settare a livello "globale" di un JFrame che può avere molti sottocomponenti un evento da tastiera non localizzato su un particolare componente)
Vedi il link
in effetti non mi ero mai documentato a riguardo....certo che la soluzione che proponi è potente...gli sto dando un'occhiata e non posso che ringraziarti!
banryu79
17-07-2008, 17:16
in effetti non mi ero mai documentato a riguardo....certo che la soluzione che proponi è potente...gli sto dando un'occhiata e non posso che ringraziarti!
Non è farina del mio sacco :D
Cmq a buon rendere ;)
!@ndre@!
17-07-2008, 17:16
Potrebbe essere una soluzione, se per esempio non si ha un JTextField che riceve il focus all'apertura del frame (come infatti hai suggerito).
Un'altra soluzione che ho trovato e sperimentato (con risultati positivi) è quella di intercettare direttamente gli eventi generati dalla tastiera e diretti al KeyboardFocusManager prima che lui li smisti al componente "in focus" (per esempio appunto per settare a livello "globale" di un JFrame che può avere molti sottocomponenti un evento da tastiera non localizzato su un particolare componente)
Vedi il link (http://www.hwupgrade.it/forum/showthread.php?t=1774047)
..molto interessante.....in futuro potrebbe tornarmi utile!!
..per ora come immagino avrete capito sono ancora all'inizio!!:D
Per non impazzire fra focus e listener puoi pure fare
laTuaFinestra.getRootPane().setDefaultButton(ilTuoPulsante);
banryu79
18-07-2008, 09:19
Per non impazzire fra focus e listener puoi pure fare
laTuaFinestra.getRootPane().setDefaultButton(ilTuoPulsante);
Ottimo! Non conoscevo setDefaultButton(...), grazie :)
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.