Replace keyAdapter with key binding

How can I use key bindings in this code since the adapter for keys does not work? I already looked at the documentation on key bindings, but I cannot figure out how to do this.

private class KeyLis extends KeyAdapter { @Override public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: up = true; break; case KeyEvent.VK_DOWN: down = true; break; case KeyEvent.VK_LEFT: left = true; break; case KeyEvent.VK_RIGHT: right = true; break; } } @Override public void keyReleased(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: up = false; break; case KeyEvent.VK_DOWN: down = false; break; case KeyEvent.VK_LEFT: left = false; break; case KeyEvent.VK_RIGHT: right = false; break; } } } 

thanks

+4
source share
1 answer

You need to add the corresponding key to the InputMap component on which you want to apply KeyBinding , as shown below:

 panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( KeyStroke.getKeyStroke("pressed UP"), "pressedUPAction"); panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( KeyStroke.getKeyStroke("released UP"), "releasedUPAction"); panel.getActionMap().put("pressedUPAction", new AbstractAction() { @Override public void actionPerformed(ActionEvent ae) { System.out.println("UP Arrow Pressed"); } }); panel.getActionMap().put("releasedUPAction", new AbstractAction() { @Override public void actionPerformed(ActionEvent ae) { System.out.println("UP Arrow Released"); } }); 

Take a look at this working example:

 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SmallExample { private JButton button; private JPanel panel; private void displayGUI() { JFrame frame = new JFrame("Small Example"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); panel = new JPanel() { @Override public Dimension getPreferredSize() { return (new Dimension(100, 100)); } }; panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( KeyStroke.getKeyStroke("pressed UP"), "pressedUPAction"); panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( KeyStroke.getKeyStroke("released UP"), "releasedUPAction"); panel.getActionMap().put("pressedUPAction", new AbstractAction() { @Override public void actionPerformed(ActionEvent ae) { System.out.println("UP Arrow Pressed"); } }); panel.getActionMap().put("releasedUPAction", new AbstractAction() { @Override public void actionPerformed(ActionEvent ae) { System.out.println("UP Arrow Released"); } }); frame.setContentPane(panel); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { new SmallExample().displayGUI(); } }; EventQueue.invokeLater(runnable); } } 
+4
source

Source: https://habr.com/ru/post/1495209/


All Articles