Кнопка отмены диалога
Как я могу установить кнопку отмены в Swing JDialog
кнопка, действие которой выполняется автоматически, если пользователь нажимает клавишу "Отмена" на клавиатуре?
Аналог предлагается для действия по умолчанию через setDefaultButton
метод корневой панели диалога.
Если это помогает, я ищу аналог WinForms Form.CancelButton
имущество.
4 ответа
Я не думаю, что это возможно с JDialog, не расширяя его.
Вы можете использовать JOptionPane.showOptionDialog() (или, возможно, один из других методов показа), передавая кнопки JButton, которые вы хотите использовать.
Если переданные параметры являются компонентами, они будут отображаться как обычно, поэтому вы можете сделать что-то вроде этого:
int optionType = JOptionPane.DEFAULT_OPTION;
int messageType = JOptionPane.PLAIN_MESSAGE; // no standard icon
JButton ok = new JButton("ok");
JButton cancel = new JButton("cancel");
//add any handlers to the buttons
...
//construct options
Object[] selValues = { ok, cancel };
//show dialog as normal, selected index will be returned.
int res = JOptionPane.showOptionDialog(null, "message",
"title", optionType, messageType, null, selValues,
selValues[0]);
Лучший способ увидеть это добавить Action
к карте действий корневой панели и свяжите это действие с escape-ключом, используя карту ввода корневой панели.
Для этого вам нужен Action
, Если поведение вашей кнопки отмены реализовано как действие (т.е. cancelButton.getAction() != null
), тогда это будет работать:
getRootPane (). getInputMap (JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put (KeyStroke.getKeyStroke (KeyEvent.VK_ESCAPE, 0), "CANCEL"); getRootPane (). getActionMap (). put ("ОТМЕНА", cancelButton.getAction());
В противном случае, если логика кнопки отмены реализована через ActionListener
Вы могли бы иметь actionPerformed()
метод ActionListener
позвонить private void onCancel()
метод, который реализует логику, и регистрирует действие "отмена", которое вызывает тот же метод.
getRootPane (). getInputMap (JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put (KeyStroke.getKeyStroke (KeyEvent.VK_ESCAPE, 0), "CANCEL"); getRootPane (). getActionMap (). put ("ОТМЕНА", новый AbstractAction(){ @Override public void actionPerformed(ActionEvent e) { OnCancel(); } });
Однолинейное решение
t.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke("ESCAPE"), btnCancel.getAction());
где t - любой компонент (кроме JButton), например, JTextField в диалоговом окне.
Все, что вам нужно сделать, это присоединить слушателя действия к кнопке и вызвать dialog.setVisible(false)
внутри него.