如何在java swing中为按钮网格实现actionlistener?

时间:2013-10-07 03:53:29

标签: java swing jbutton actionlistener

我正在用java开发一个whack-a-mole游戏。我正在创建一个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个按钮时,它仍然会打印出“其他按钮被点击”。

2 个答案:

答案 0 :(得分: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的{​​{1}}属性....

ActionEvent

同样,您可以使用public void actionPerformed(ActionEvent ae) { String cmd = ae.getActionCommand(); if ("0".equals(cmd)) { //... } else if ... 数组根据buttons的来源找到按钮

ActionEvent

但这取决于你......

答案 1 :(得分:1)

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

创建按钮时,您可以在列表中按下所有 whack-a-mole 按钮。在找到源代码时迭代它们。

使用setActionCommand()&amp; getActionCommand()而不是setName()来处理 whacked 按钮。

 for(JButton button : buttonList )
    if (ae.getSource() == button) {
        //Do required tasks.
    }