Настройка мнемоники и горячих клавиш для диалогового окна JOptionPane

StackOverflow https://stackoverflow.com/questions/1505525

Вопрос

Можно ли назначить горячие клавиши и мнемонику кнопкам в диалоговом окне 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top