Java键绑定和箭头键

Java键绑定和箭头键,java,swing,multidimensional-array,Java,Swing,Multidimensional Array,我正在写一个自上而下的小游戏,玩家通过箭头键控制的二维数组移动。 我一定看过所有关于键绑定的教程,但是我不能让我的键绑定更新主“floor”对象。救命啊!很抱歉出现了文字墙,但我认为这三个文件的上下文很有帮助。谢谢 编辑:SSCCE /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package palace.hero; import java

我正在写一个自上而下的小游戏,玩家通过箭头键控制的二维数组移动。
我一定看过所有关于键绑定的教程,但是我不能让我的键绑定更新主“floor”对象。救命啊!很抱歉出现了文字墙,但我认为这三个文件的上下文很有帮助。谢谢

编辑:SSCCE

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package palace.hero;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class SSCCE 
{
    public static void main(String[] args) 
    {    
        JPanel gridPanel = new JPanel();

        int xCoord = 0;
        int yCoord = 0;

        //Key Bindings        
        gridPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_W, 0), "up");
        gridPanel.getActionMap().put("up", new SSCCEKA(xCoord, yCoord, "up"));
        gridPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_S, 0), "down");
        gridPanel.getActionMap().put("down", new SSCCEKA(xCoord, yCoord, "down"));
        gridPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0), "left");
        gridPanel.getActionMap().put("left", new SSCCEKA(xCoord, yCoord, "left"));
        gridPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0), "right");
        gridPanel.getActionMap().put("right", new SSCCEKA(xCoord, yCoord, "right"));

        //Window
        JFrame window = new JFrame("Window");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        int windowHeight = 1125;
        int windowWidth = 900;
        window.setPreferredSize(new Dimension(windowHeight, windowWidth));

        window.add(gridPanel);
        window.pack();
        window.setVisible(true);

        gridPanel.requestFocusInWindow();
    }
}


当你创建任何像游戏一样复杂的东西时,你应该使用

那么,让我们创建一个模型类

public class GameModel {

    private int xCoordinate;
    private int yCoordinate;

    public int getxCoordinate() {
        return xCoordinate;
    }

    public void setxCoordinate(int xCoordinate) {
        this.xCoordinate = xCoordinate;
    }

    public int getyCoordinate() {
        return yCoordinate;
    }

    public void setyCoordinate(int yCoordinate) {
        this.yCoordinate = yCoordinate;
    }

}
您可以通过构造函数将GameModel类传递给SSCCEKA类


请记住,只有控制器类可以修改游戏模型。

问题是没有检测到按键还是其他原因?(如果是这样,构造一个应该很简单。)不,它们正在被检测到,我只是不知道如何从AbstractAction中赋予“actionPreformed”函数有副作用。(我需要它来打印“上、下、左、右”,但我希望它能真正改变主类中的地板对象…)如果你能把你的问题归结起来会很有帮助。。。看,修好了。那么在这个例子中,我将如何获得键绑定来影响主类中的xcoord和yCoord呢?很抱歉这个新手的问题,但是每次按下按钮时,您将如何调用构造函数呢?(我真正想问的是如何允许actionPressed函数编辑gameModel?@Haskelier:我假设你说的是gameModel构造函数。在GUI构造函数开始的某个地方调用它一次,并将实例传递给SSCCEKA类,这样actionPressed方法就可以访问GameModel实例。这是我写的一篇文章,展示了一个模型/视图/控制器模式。它工作了!!!!多谢各位。我只需要在KeyAction类中创建一个Gamemodel实例。
public class GameModel {

    private int xCoordinate;
    private int yCoordinate;

    public int getxCoordinate() {
        return xCoordinate;
    }

    public void setxCoordinate(int xCoordinate) {
        this.xCoordinate = xCoordinate;
    }

    public int getyCoordinate() {
        return yCoordinate;
    }

    public void setyCoordinate(int yCoordinate) {
        this.yCoordinate = yCoordinate;
    }

}