我如何在此代码中使用键绑定,因为键适配器不能正常工作?我已经查看了键绑定的文档,但我无法理解如何执行此操作。
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;
}
}
}
谢谢
答案 0 :(得分:4)
您需要将相应的密钥添加到要应用InputMap
的组件的KeyBinding
,如下所示:
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");
}
});
看看这个工作示例:
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);
}
}