Impostazione mnemonici e Hot Keys per una finestra di dialogo JOptionPane
-
19-09-2019 - |
Domanda
E 'possibile assegnare tasti di scelta rapida e mnemonici ai pulsanti in una finestra di dialogo JOptionPane? Mi piacerebbe essere in grado, in una finestra di messaggio JOptionPane generato con le opzioni Sì, No e Annulla, premere Y per colpire il pulsante Sì, N per colpire il pulsante No e la fuga per attivare il pulsante di fuga. Allo stesso modo in una finestra di dialogo con i pulsanti Ok e Cancel mi piacerebbe essere in grado di attivarli con enter e fuggire.
Ho tentato passando JButtons in tasto matrice Object del JOptionPane con il mnemonico impostato già. I mnemonici lavoro ei pulsanti visualizzati correttamente nelle finestre di dialogo, tuttavia, non agiscono correttamente quando sono attivati. La più evidente è che non dispongono della finestra di dialogo.
Qual è il modo corretto per aggiungere tasti di scelta rapida e mnemonici ai pulsanti di una finestra JOptionPane?
Soluzione
È possibile creare il JOptionPane
, e poi un ciclo tra i componenti del riquadro (bambini, ecc) il controllo per vedere se tutte le componenti sono instanceof JButton
, e in tal caso controllare il testo e impostare la corretta mnemonico.
JOptionPane p = new JOptionPane();
Component[] c = p.getComponents();
Altri suggerimenti
Sfruttate UIManager come segue:
UIManager.put("OptionPane.okButtonMnemonic", "79"); // for Setting 'O' as mnemonic
UIManager.put("OptionPane.cancelButtonMnemonic", "67"); // for Setting 'C' as mnemonic
Invia i pulsanti come parametri, invece di stringhe
JButton button1 = new JButton( "<html>" + nextQuestion1 + "</html>");
button1.setMnemonic('a');
JButton button2 = new JButton(nextQuestion2 + "VUHU");
JButton button3 = new JButton(abort);
Object[] possibleValues = new Object[]{button1,button2,button3};
int selectedValue = showOptionDialog(owner, question, possibleValues);