Nel mio programma swing ho un JTextField e un JButton. Vorrei che, una volta che l'utente preme il tasto "invio", viene eseguito l'actionListener di JButton. Come lo farei? Grazie in anticipo.Come associare premendo "invio" con il pulsante di selezione?
risposta
JRootPane ha un metodo setDefaultButton (pulsante JButton) che farà ciò che si desidera. Se la tua app è un JFrame, implementa l'interfaccia RootPaneContainer e puoi ottenere il riquadro principale chiamando getRootPane() su JFrame, quindi chiama setDefaultButton nel pannello radice che è stato restituito. La stessa tecnica funziona con JApplet, JDialog o qualsiasi altra classe che implementa RootPaneContainer.
Funziona solo dopo aver inizializzato il componente con il quale si pianifica .getRootPane()? In tal caso, ciò significherebbe che non potrei costruirlo direttamente nel costruttore di quel componente, sì? –
@LucasMorgan: è necessario un JRootPane perché funzioni, e questo ha senso. Altrimenti potrebbe essere necessario utilizzare le associazioni di tasti. –
c'è un esempio qui
http://www.java2s.com/Code/Java/Swing-JFC/SwingDefaultButton.htm
questo è quello che vi serve: rootPane.setDefaultButton (button2);
Sbarazzarsi di ActionListeners. Questo è il vecchio stile per fare ascoltatori. Graduate alla classe Action. Il trucco è capire come funzionano InputMaps e ActionMaps. Questa è una caratteristica unica di swing che è veramente molto bello:
http://download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html
Ecco come si fa:
JPanel panel = new JPanel();
panel.setLayout(new TableLayout(...));
Action someAction = new AbstractAction("GO") {
public void actionPerformed() {
}
};
InputMap input = panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
input.put(KeyStroke.getKeyStroke("enter", "submit");
panel.getActionMap().put("submit", someAction);
panel.add(button = new JButton(someAction));
panel.add(textField = new JTextField());
Utilizzando la WHEN_ANCESTOR_OF_FOCUSED_COMPONENT consente al pannello di ricevere gli eventi di tastiera da qualsiasi del suo bambino (cioè antenati). Quindi, indipendentemente dal componente attivo, purché all'interno del pannello, il tasto invocherà qualsiasi azione registrata in "Invia" in ActionMap.
Ciò consente di riutilizzare Azioni in menu, pulsanti o sequenze di tasti condividendole.
Key Binding è utile in molte situazioni ma non è un po 'eccessivo per il problema corrente quando è possibile utilizzare le altre soluzioni più semplici offerte (che probabilmente usano il binding delle chiavi in background). –
Dipende l'autore non ha specificato se questo era in una finestra di dialogo da solo, o l'interfaccia utente principale. L'utilizzo di setDefaultButton() presuppone che sia l'unica cosa in una finestra di dialogo. Per non parlare della comprensione delle Azioni e del modo in cui si relazionano con il resto del toolkit Swing ti porta oltre ad altri argomenti come i collegamenti ai menu, le sequenze di tasti globali e personalizza le mappature dei tasti per i componenti predefiniti. Inoltre, chiunque usi ActionListeners deve essere consapevole che le azioni sono superiori in tutti i casi. – chubbsondubs
"chiunque usi ActionListeners deve essere consapevole che le azioni sono superiori in tutti i casi." - Hm, e mi è stato insegnato che tutte le generalizzazioni sono sbagliate. :) –
- 1. Prevent Modulo di nuovo invio premendo il pulsante Indietro
- 2. Invio di dati da textarea premendo "Invio"
- 3. Come simulare premendo Invio in Rspec
- 4. pulsante CSS premendo effetto
- 5. angular2 presentare il modulo premendo il pulsante Enter
- 6. come mettere a fuoco un pulsante premendo il tasto "invio" nella tastiera
- 7. UISearchController disattiva VC premendo il pulsante Annulla
- 8. Ricarica la pagina premendo il pulsante Indietro
- 9. Forza ricarica/aggiornamento premendo il pulsante Indietro
- 10. Come associare il pulsante a ListView.SelectedItem
- 11. Invio di un modulo con il pulsante Invio in un modulo con diversi pulsanti di invio
- 12. Qt: Come gestisco l'evento dell'utente premendo il pulsante "X" (chiudi)?
- 13. Premendo 'invio' su un tipo di input = "testo", come?
- 14. Invia premendo Invio in un modulo di Windows
- 15. Come associare il pulsante WPF a un comando in ViewModelBase?
- 16. Scegliere il pulsante mentre si preme il pulsante di invio
- 17. Programmazione premendo un pulsante UITabBar in Xcode
- 18. Codifica Problema con il pulsante di invio di Facebook
- 19. Pulsante di selezione sfondo
- 20. Perché forme con campo di immissione unica presentano Premendo il tasto invio in ingresso
- 21. vai alla pagina jsp premendo il pulsante indietro
- 22. Android premendo il pulsante Indietro dovrebbe uscire dall'app
- 23. Tag di ancoraggio come pulsante di invio?
- 24. come modificare l'aspetto del pulsante di invio?
- 25. Identifica il valore del pulsante di invio cliccato con più pulsanti di invio
- 26. Come posso passare un parametro tramite il pulsante di invio?
- 27. un tag come pulsante di invio?
- 28. Utilizzare un div come pulsante di invio
- 29. Pulsante Disabilita dopo invio con jQuery
- 30. finestra di invio di Facebook prepopolata con il testo
getRootPane(). SetDefaultButton (JButton defaultButton); – ashubuntu