在我们的代码中,我们有一个10 x 10的按钮数组。 我们使用嵌套的for循环创建了10 x 10数组,我们创建按钮没有问题。 此外,我们还可以在单击按钮a时显示“按钮单击”。但是我们如何识别点击了哪个按钮?
我们正在使用actionListeners和actionPerformed方法。
答案 0 :(得分:2)
您可以在活动中调用getSource()
方法。
或者您可以在按钮中使用Action
类,并在构建按钮时为每个类创建一个新实例。
答案 1 :(得分:2)
将所有按钮放在一个列表中(在内部循环中很容易完成),使列表可用于ActionListener(例如,作为外部类的属性;我不知道你的众多团队是如何安排听众的,所以我不能提供任何细节)。然后致电:
int buttonIndex = listWithButtons.indexOf(event.getSource())
如果你们中的一个想知道按钮的确切坐标,可以通过以下公式计算:
int row = buttonIndex / 10;
int col = buttonIndex % 10;
答案 2 :(得分:1)
我假设这是一个JButton。您可以使用setActionCommand(“command”+ row +“ - ”+ column)。然后在监听器中只需说getActionCommand()来查看单击了哪个按钮。
答案 3 :(得分:0)
两个简单的解决方案,但可能不是最好的解决方案:
实现自己的侦听器的按钮类。
您也可以测试每个按钮,看它是否等于action.getSource()对象。 或者简单地将(ButtonClass)转换为getSource()以便能够使用检索到的按钮。
答案 4 :(得分:0)
您可以像这样使用getActionCommand:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestButtons extends JPanel {
private static final long serialVersionUID = 1L;
public TestButtons() {
JButton btn1 = new JButton("Btn1");
btn1.addActionListener(new ButtonListener());
add(btn1);
JButton btn2 = new JButton("Btn2");
btn2.addActionListener(new ButtonListener());
add(btn2);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().add(new TestButtons());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
}
}
class ButtonListener implements ActionListener {
ButtonListener() {
}
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand()+ " has been clicked");
}
}
答案 5 :(得分:0)
我们最终在actionPerformed中使用了一个嵌套的for循环,它遍历了2d数组并从那里调用了action方法。它可能不是最好的解决方案,最好使用不同的技术,但似乎工作得很好。
虽然这里有一些非常好的想法,谢谢你们!