Поняв, как обрабатывать события клавиш уровня окна ( Как получить событие ключа в экземпляре Java Swing JFrame, который имеет много JTextFields? ), я хотел бы определить один класс, который может бытьприсоединяется через:
frame.getRootPane () .registerKeyboardAction (...);
Класс включен ниже, и он предназначен для использования в главном окне и во всехподокна. Идея состоит в том, что клавиши Fx будут отображать / скрывать подокна индивидуально, независимо от того, находитесь ли вы в главном окне или в одном из дочерних окон (т. Е. Все приложение будет одинаково реагировать на нажатия клавиш Fx). Конструктор включает в себя как текущее окно, так и главное окно, в которое включены все окна.
Моя проблема в том, что я не знаю, как определить, какая клавиша была нажата в методе actionPerformed
. Любые советы о том, как определить, KeyStroke.getKeyStroke(KeyEvent.VK_Fxx,0)
, что вызвало действие actionPerformed, приветствуются.
public class ApplicationLevelKeys implements ActionListener {
private MainWindow mainWindow;
public ApplicationLevelKeys(JFrame frame, MainWindow mw) {
mainWindow = mw;
frame.getRootPane().registerKeyboardAction(this, KeyStroke.getKeyStroke(KeyEvent.VK_F2,0), JComponent.WHEN_IN_FOCUSED_WINDOW);
frame.getRootPane().registerKeyboardAction(this, KeyStroke.getKeyStroke(KeyEvent.VK_F12,0), JComponent.WHEN_IN_FOCUSED_WINDOW);
}
@Override
public void actionPerformed(final ActionEvent e) {
// F12 - Display Attribute Window
System.out.println("F12");
if(mainWindow.propertiesWindow.isVisible()) {
mainWindow.propertiesWindow.setVisible(false);
} else {
mainWindow.propertiesWindow.setVisible(true);
}
// F2 - Display Period Window
System.out.println("F2");
if(mainWindowperiodWindow.isVisible()) {
mainWindow.periodWindow.setVisible(false);
} else {
mainWindow.periodWindow.setVisible(true);
}
}
}