[英]Key bindings does not run
我在 netbeans 中工作 java 程序语言。 我想通过使用键绑定来移动一个 jlabel 框。 当我击键时,盒子不能移动。 例如我击键 w,a,s,d 但框不能移动。 当我按下这些键时,它应该是go 上下左右,但程序中没有移动。 盒子留在原处。 应该怎么办?
import java.awt.Color;
import java.awt.event.*;
import javax.swing.*;
public class BoxGame {
JFrame frame;
JLabel label;
Action upAction;
Action downAction;
Action leftAction;
Action rightAction;
BoxGame(){
frame = new JFrame("Keybinding");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(450,450);
frame.setLayout(null);
label = new JLabel();
label.setBackground(Color.red);
label.setBounds(100,100,100,100);
label.setOpaque(true);
upAction = new UpAction();
downAction = new DownAction();
leftAction = new LeftAction();
rightAction = new RightAction();
label.getInputMap().put(KeyStroke.getKeyStroke("w"), "upAction");
label.getActionMap().put("upAction",upAction);
label.getInputMap().put(KeyStroke.getKeyStroke("s"), "downAction");
label.getActionMap().put("downAction", downAction);
label.getInputMap().put(KeyStroke.getKeyStroke("a"), "leftAction");
label.getActionMap().put("leftAction", leftAction);
label.getInputMap().put(KeyStroke.getKeyStroke("d"), "rightAction");
label.getActionMap().put("rightAction", rightAction);
frame.add(label);
frame.setVisible(true);
}
public class UpAction extends AbstractAction{
@Override
public void actionPerformed(ActionEvent e) {
label.setLocation(label.getX(), label.getY()-10);
}
}
public class DownAction extends AbstractAction{
@Override
public void actionPerformed(ActionEvent e) {
label.setLocation(label.getX(), label.getY()+10);
}
}
public class LeftAction extends AbstractAction{
@Override
public void actionPerformed(ActionEvent e) {
label.setLocation(label.getX()-10, label.getY());
}
}
public class RightAction extends AbstractAction{
@Override
public void actionPerformed(ActionEvent e) {
label.setLocation(label.getX()+10, label.getY());
}
}
}
首先使用更“gloabl”的InputMap
,您正在使用的那个要求组件可聚焦并具有焦点。
避免使用KeyEvent.getKeyStroke(String)
,它会做一些奇怪的事情并且不会帮助你,而是提供实际的KeyEvent
,例如
InputMap inputMap = label.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_W, 0), "upAction");
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_S, 0), "downAction");
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0), "leftAction");
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0), "rightAction");
我还建议花时间学习自定义绘画,因为组件往往不能像这样很好地工作。
有关详细信息,请参阅在 AWT 和 Swing 中绘制和执行自定义绘制
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.