Кнопка JDialog отменить
как я могу установить кнопку отмены в качели JDialog
, т. е. кнопка, действие которой выполняется автоматически, если пользователь нажимает клавишу "Отмена" на клавиатуре?
аналог предлагается для действия по умолчанию через setDefaultButton
метод корневой панели диалогового окна.
Если это помогает, я ищу аналог WinForms Form.CancelButton
собственность.
4 ответов
Я не думаю, что это возможно с JDialog без его продления.
вы можете использовать JOptionPane.showOptionDialog () (или, возможно, один из других методов show), передавая кнопки, которые вы хотите использовать.
если переданные параметры являются компонентами, они будут отображаться как обычно, поэтому вы можете сделать что-то вроде этого:
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("CANCEL", 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("CANCEL", new 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)
внутри него.