Исходя из вашего сценария, у меня есть предложение для клавиатуры:
Вы можете использовать средство свинга 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(); } });
Таким образом, вы можете зарегистрировать «глобальные» обработчики событий для ярлыков 1 .
1 , хотя в вашем случае это может иметь некоторые ограничения.
Для случая события мыши я бы создал рекурсивную функцию, которая добавляет экземпляр 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);
}
}
}
Просто чтобы захватить концепцию. Вам могут потребоваться разные или несколько приемников для различных компонентов.
Редактировать: Извините, я случайно сказал WindowAdapter вместо MouseAdapter.