Definindo Mnemonics e teclas de atalho para um diálogo JOptionPane
-
19-09-2019 - |
Pergunta
É possível hotkeys atribuir e mnemônicos para os botões em um diálogo JOptionPane? Eu gostaria de ser capaz, em um diálogo de mensagem JOptionPane gerada com as opções sim, não e cancelar, pressione Y para acertar o botão Sim, N para acertar o botão Não e escapar para ativar o botão de fuga. Da mesma forma em um diálogo com botões Ok e Cancelar eu gostaria de ser capaz de ativá-los com enter e escapar.
Eu tenho tentado passar JButtons em matriz de objectos botão do JOptionPane com os mnemônicos já definido. Os mnemônicos trabalhar e os botões aparecem corretamente nas caixas de diálogo, no entanto, eles não agem corretamente quando eles são ativados. Mais notavelmente eles não descarte de diálogo.
O que é a maneira correta de adicionar atalhos e mnemônicos aos botões de um diálogo JOptionPane?
Solução
Você pode criar seu JOptionPane
, e depois percorrer os componentes do painel (crianças etc.) verificando se todos os componentes estão instanceof JButton
, e se assim verificar o texto, e definir o mnemônico adequada.
JOptionPane p = new JOptionPane();
Component[] c = p.getComponents();
Outras dicas
Fazer uso de UIManager da seguinte forma:
UIManager.put("OptionPane.okButtonMnemonic", "79"); // for Setting 'O' as mnemonic
UIManager.put("OptionPane.cancelButtonMnemonic", "67"); // for Setting 'C' as mnemonic
Enviar os botões como parâmetros em vez de Cordas
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);