如何查看网格Java中某个位置的图标

时间:2014-10-14 02:02:26

标签: java jbutton

基本上,当网格中的某个点是播放器图标时,它将执行命令。 当我运行此命令时,我得到java.lang.NullPointerException:null。

if (arrButton[1][1].getIcon() == Player)
{
    System.out.println("test complete");
}

1 个答案:

答案 0 :(得分:0)

假设玩家在点击按钮时从一个按钮移动到另一个按钮,

首先有一个变量(可能是全局的)来保存玩家的当前位置,如下所示:

private int playerCurrentPositionX;
private int playerCurrentPositionY;

您的一个问题是java.lang.NullPointerException。发生这种情况主要是因为异常指向的行上的对象为null。在您的情况下,正如@MadProgrammer指出的那样,它可以是arrButtonarrButton[1][1]。如果对象尚未初始化,则该对象为null。因此,对象不会为null,我们必须初始化它。在你的情况下是这样的:

JButton[][] arrButton = new JButton[11][11];

在这种情况下,只初始化JButtons的二维数组。 按钮本身尚未初始化。我们需要像这样初始化它们:

for (int i = 0; i < arrButton.length; i++) {
    for (int j = 0; j < arrButton[i].length; j++) {
        arrButton[i][j] = new JButton();
    }
}

现在,为了检测是否点击了JButton,我们像这样添加ActionListener

arrButton[i][j].addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        //this method is executed when a button is clicked.
        //TODO add logic here
    }
}

有关如何使用ActionListeners的详细信息,请参阅this.

我们在方法中点击了哪个按钮并使用它来保存玩家的位置:

public void actionPerformed(ActionEvent e) {
    JButton button = (JButton) e.getSource();

    for (int i = 0; i < arrButton.length; i++) {
        for (int j = 0; j < arrButton[i].length; j++) {
            if (arrButton[i][j] == button) {
                playerCurrentPositionX = i;
                playerCurrentPositionY = j;

                //you can also detect using i and j if this button/grid has a missile
            }
        }
    }
}

有关java swing组件的更多信息here.