我正在用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个按钮时,它仍然会打印出“其他按钮被点击”。
答案 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.
}