我目前正在开发迷宫游戏,我有一个用户可以更改控件的设置,为了做到这一点,有几个按钮对应每个游戏控件(移动......等)。要更改游戏控件,用户必须单击按钮,然后按一个键,然后控制键应该已更新,如按钮文本,它应如下所示:UP_MOVEMENT = NEW_CONTROL。 因此,如果我想将UP_MOVEMENT键更改为" P"例如,我应该在UP_MOVEMENT按钮上单击一次,然后按下" P"关键,它应该完成。 问题是,一旦我点击按钮,按下想要的键后看到按钮的文本更改,我必须再次点击它,我希望它是即时的。这是我的代码的一部分:
public JPanel createKeyBidings() {
JPanel buttonBox = new JPanel();
JButton upKey = new JButton("UP="+ KeyEvent.getKeyText(settings.getUp()));
JButton downKey = new JButton("DOWN="+ KeyEvent.getKeyText(settings.getDown()));
JButton leftKey = new JButton("LEFT="+KeyEvent.getKeyText(settings.getLeft()));
JButton rigthKey=new JButton("RIGTH="+KeyEvent.getKeyText(settings.getRight()));
JButton shoot = new JButton("SHOOT");
upKey.addKeyListener(this);
downKey.addKeyListener(this);
leftKey.addKeyListener(this);
rigthKey.addKeyListener(this);
shoot.addKeyListener(this);
upKey.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (keyPressed != null) {
settings.setUp(keyPressed.getKeyCode());
upKey.setText("UP=" + keyPressed.getKeyChar());
}
}
});
buttonBox.add(upKey);
buttonBox.add(downKey);
buttonBox.add(leftKey);
buttonBox.add(rigthKey);
buttonBox.add(shoot);
return buttonBox;
}
答案 0 :(得分:1)
如果您想根据KeyPressed事件做出反应,那么您应该考虑将逻辑放在KeyListener方法中。换句话说,不是在keyPressed变量中保持最后一个键,而是保持每次触发ActionListener时设置的buttonPressed变量。按下按键时,检查上次按下哪个按钮并做出相应的反应。如果您希望仅在按钮被按下时(按下并且在释放按钮之后而不是在释放之后 - 当激活ActionListener时),则在KeyListener中,您可以通过检查按下按钮来评估按下了哪个按钮它的模型(例如if(myButton.getModel()。isPressed())
答案 1 :(得分:0)
这可能是一个新手“解决”(因为我是Java / Swing的新手)但是在用以下内容更新按钮文本后立即尝试刷新JFrame
:
SwingUtilities.updateComponentTreeUI(yourJFrame);
如果这不起作用,请尝试:
yourJFrame.invalidate();
yourJFrame.validate();
yourJFrame.repaint();