3

我正在用java开发一个打地鼠游戏。我正在创建一个 10*10 的按钮网格。但是我无法访问 actionlistener 中单击按钮的 id。这是我到目前为止的代码。

    String buttonID;
    buttonPanel.setLayout(new GridLayout(10,10));
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            buttonID = Integer.toString(++buttonCount);
            buttons[i][j] = new JButton();
            buttons[i][j].setName(buttonID);
            buttons[i][j].addActionListener(this);
            buttons[i][j].setDisabledIcon(null);
            buttonPanel.add(buttons[i][j]);
        }
    }

   public void actionPerformed(ActionEvent ae) {
    if (ae.getSource()==startButton) {
        System.out.println("Game has been started");
    }
    if (ae.getSource() == "34") {  //please see the description below
        System.out.println("Yes I have clicked this button");
    }
    else {
        System.out.println("Other button is clicked");
    }
}

目前我刚刚打印了一些东西。我不知道如何将 ae.getsource() 与单击的按钮进行比较。我只是试图将它与“34”进行比较。但是当我单击网格上的第 34 个按钮时,它仍然会打印“单击其他按钮”。

4

2 回答 2

4

使用按钮actionCommand属性根据您的要求唯一标识每个按钮...

for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
        buttonID = Integer.toString(++buttonCount);
        //...
        buttons[i][j].setActionCommand(String.toString(buttonID));
        //...
    }
}

然后在你的actionPerformed方法中,简单地查找...的actionCommand属性ActionEvent

public void actionPerformed(ActionEvent ae) {
    String cmd = ae.getActionCommand();
    if ("0".equals(cmd)) {
        //...
    } else if ...

同样,您可以使用buttons数组根据ActionEvent's 源查找按钮

public void actionPerformed(ActionEvent ae) {
    Object source = ae.getSource();
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            if (source == (buttons[i][j])) {
                //...
                break;
            }
        }
    }

但这取决于你...

于 2013-10-07T03:58:27.730 回答
1

使用按钮对象,而不是字符串。您不需要跟踪按钮的 id 或名称。只需遍历所有按钮即可找出来源。

创建按钮时,您可以按下列表中的所有whack-a-mole按钮。并在找到源时遍历它们。

使用setActionCommand()&getActionCommand()而不是处理被敲击setName()的按钮。

 for(JButton button : buttonList )
    if (ae.getSource() == button) {
        //Do required tasks.
    }
于 2013-10-07T03:58:37.163 回答