根据您的情况,我对键盘方面有一个建议:
您可以使用 swing 的 KeyStroke 工具来实现:
JRootPane rp = getRootPane();
KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0, false);
rp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ks, "F2");
rp.getActionMap().put("F2", new AbstractAction() {
public void actionPerformed(ActionEvent e) { onF2Action(); } });
This way you can register 'global' event handlers for shortcuts1.
1 although it might have some limitations in your case.
对于鼠标事件的情况,我将创建一个递归函数,它添加了一个MouseAdapter
每个目标组件的实例。例如:
void addToAll(Container c, MouseAdapter a) {
for (Component p : c.getComponents()) {
if (p instanceof InterrestingComponent) {
p.addMouseListener(a);
p.addMouseMotionListener(a);
p.addMouseWheelListener(a);
} else
if (p instanceof Container) {
addToAll((Container)p, a);
}
}
}
只是为了捕捉这个概念。您可能需要针对不同组件的不同或多个接收器。
Edit:抱歉,我不小心说的是 WindowAdapter 而不是 MouseAdapter。