【发布时间】:2023-04-07 03:40:01
【问题描述】:
我有一个 Swing 应用程序,它需要根据是否按下 control 或 alt 键来显示不同的控件集。我向主组件添加了一个 KeyListener,但仅在选择该组件时才通知它,而不是在选择子组件时通知。有没有办法监听组件和所有后代的事件?
编辑:
我尝试使用主组件的 InputMap,但按下修饰键时没有触发任何事件。具体来说,我有以下代码:
InputMap inputMap = panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
inputMap.put(KeyStroke.getKeyStroke("pressed CONTROL"), "test1");
inputMap.put(KeyStroke.getKeyStroke("released CONTROL"), "test2");
ActionMap actionMap = panel.getActionMap();
actionMap.put("test1", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("pressed");
}
});
actionMap.put("test2", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("released");
}
});
当按下和释放控制键时,这将打印“released”而不是“pressed”。没有其他任何东西在任何 InputMap 中注册任何内容,因此不会为相同的击键注册其他内容。
【问题讨论】:
标签: java events swing keylistener