Настройка мнемоники и горячих клавиш для диалогового окна JOptionPane
-
19-09-2019 - |
Вопрос
Можно ли назначить горячие клавиши и мнемонику кнопкам в диалоговом окне JOptionPane?Я хотел бы иметь возможность в диалоговом окне сообщения, сгенерированном JOptionPane, с параметрами "Да", "Нет" и "Отмена" нажимать Y, чтобы нажать кнопку "Да", N, чтобы нажать кнопку "Нет", и escape, чтобы активировать кнопку escape.Аналогично, в диалоговом окне с кнопками Okay и Cancel я хотел бы иметь возможность активировать их с помощью enter и escape.
Я попытался передать JButtons в массив объектов button JOptionPane с уже установленной мнемоникой.Мнемоника работает, и кнопки корректно отображаются в диалоговых окнах, однако при активации они не действуют должным образом.Наиболее заметно, что они не удаляют диалоговое окно.
Каков правильный способ добавления горячих клавиш и мнемоники к кнопкам диалогового окна JOptionPane?
Решение
Вы можете создать свой JOptionPane
, а затем пройдите по компонентам панели (дочерним элементам и т.д.), проверяя, есть ли какие-либо компоненты instanceof JButton
, и если это так, проверьте текст и установите соответствующую мнемонику.
JOptionPane p = new JOptionPane();
Component[] c = p.getComponents();
Другие советы
Используйте UIManager следующим образом:
UIManager.put("OptionPane.okButtonMnemonic", "79"); // for Setting 'O' as mnemonic
UIManager.put("OptionPane.cancelButtonMnemonic", "67"); // for Setting 'C' as mnemonic
Отправляйте кнопки в качестве параметров вместо строк
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);