I tried to implement listener shortcuts for the whole frame and did not succeed, finally found a way. If you want to set the listener even when focusing on another component, you must add listeners to all components.
Here is my code
Call this in your constructor:
setShortcutListener(this); // this = JFrame when you call in in constructor
SetShortcutListener method (JFrame):
private void setShortcutListener(JFrame frame) { List<Component> comp_list = Common.getAllComponents(frame); for (Component component : comp_list) { component.addKeyListener(getShortcutKeyListener()); } }
GetAllComponents method (frame); The Common class is just a class,
public static List<Component> getAllComponents(final Container c) { Component[] comps = c.getComponents(); List<Component> compList = new ArrayList<Component>(); for (Component comp : comps) { compList.add(comp); if (comp instanceof Container) { compList.addAll(getAllComponents((Container) comp)); } } return compList; }
GetShortcutKeyListener () method:
public static KeyListener getShortcutKeyListener() { KeyListener listener = new KeyListener() { @Override public void keyReleased(KeyEvent evt) { if (evt.getKeyCode() == KeyEvent.VK_F3) { // What you do when F3 key pressed } else if (evt.getKeyCode() == KeyEvent.VK_F2) { // What you do when F2 key pressed } } @Override public void keyTyped(KeyEvent e) { // Do nothing } @Override public void keyPressed(KeyEvent e) { // Do nothing } }; return listener; }
I think we have simple paths, but this code works exactly as expected. Key listeners work in any form.
Hope this answer helps someone. Thanks.
source share