А теперь гляньте, плиз.
Сделал вроде как надо, вот так:
| Код | InputMap inputMap = sqlPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_F9, KeyEvent.SHIFT_MASK), "Run"); inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_F9, 0), "Run all"); inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); sqlPanel.getActionMap().put("Run", new AbstractAction() { public void actionPerformed(ActionEvent e) { runButton.actionPerformed(e); } }); sqlPanel.getActionMap().put("Run all", new AbstractAction() { public void actionPerformed(ActionEvent e) { runAllButton.actionPerformed(e); } }); sqlPanel.getActionMap().put("Cancel", new AbstractAction() { public void actionPerformed(ActionEvent e) { cancelButton.actionPerformed(e); } }); |
При Shift-F9 симулируется нажатие на кнопку runButton, при F9 - на runAllButton, при Esc - на cancelButton. Запуск с помощью F9/Shift-F9 работает при фокусе на любой компоненте, а вот Esc не срабатывает при некоторых фокусах, например при фокусе на какой-нибудь ячейке какой-нибудь JTable! Почему так, ведь нажатие кнопок симулируется одинаково. Ну и как мне исправить это? |