|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Nov 2005
Messaggi: 122
|
[JAVA]Scorciatoie da tastiera
Ciao ragazzi, mi sono avvicinato alla programmazione da poco ed ho scelto Java per iniziare. Naturalmente ho molte domande da fare ma una in particolare vorrei creare le solite scorciatoie da tastiera (CRTL+E per intenderci) ma non saprei come fare. Siccome sono fresco fresco, vorrei dei piccoli esempi.
|
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
se programmi interfacce grafiche in Swing le scorciatoie da tastiera sono delle combinazioni di tasti associati alle varie actions del tuo programma, dove una action é un oggetto della classe Action* che rappresenta un comando che l'utente da al programma e si manifesta all'interno della GUI sotto forma di bottone in una toolbar, menu item o altro; se ci fai caso ad esempio JButton ha un costruttore che vuole un solo argomento di tipo Action e lo stesso vale per JMenuItem.
per associare una combinazione da tastiera ad una Action devi mettere un oggetto di tipo KeyStroke sotto la chiave Action.ACCELERATOR_KEY usando il metodo Action.putValue. l'oggetto KeyStroke lo istanzi ad esempio col metodo KeyStroke.getKeyStroke, che accetta una stringa che rispetta una semplice sintassi che ti permette di esprimere combinazioni di tasti. ti rimando ai javadoc per tutti i dettagli ![]() *a voler essere proprio precisi Action é un'interfaccia, non una classe; AbstractAction é una classe astratta che implementa Action e fornisce una tipica implementazione parziale. |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Nov 2005
Messaggi: 122
|
Perfetto infatti sono riuscito a indicare quali tasti premere per la scociatoia da me preferita, in questo modo:
Codice:
JMenuItem exit = new JMenuItem("Chiudi"); exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); Codice:
public void actionPerformed( ActionEvent e ) { Object obj = e.getSource(); if( obj == exit || obj == exit.getKeyStrokeForEvent(VK_C,CTRL_MASK)){ System.exit(0); } |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
io in genere non uso un listener unico che cerca di distinguere tra tutte le possibili actions ma implemento ogni singola action estendendo AbstractAction (é anche piu efficiente).
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Nov 2005
Messaggi: 122
|
Gentilmente potresti elencarmi un piccolo esempio per capire meglio, te ne sarei grato.
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
per esempio io un JButton di solito lo istanzio cosi:
Codice:
new JButton(new AbstractAction("Prova") { private static final long serialVersionUID = ...; @Override public void actionPerformed(ActionEvente event) { System.out.println("Hello, World!"); } }); Ultima modifica di fero86 : 08-11-2009 alle 21:58. |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Nov 2005
Messaggi: 122
|
Bene ci sono riuscito, alla fine la scorciatoia è implementata in modo corretto basta collegare il metodo addActionListener sulla variabile e premere i pulsanti da me indicati.
Codice:
JMenuItem exit = new JMenuItem("Chiudi"); exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); exit.addActionListener( this ); public void actionPerformed( ActionEvent e ) { Object obj = e.getSource(); if( obj == exit){ System.exit(0); } } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:48.