检测在2D阵列Java中单击了哪个按钮

时间:2011-02-09 17:11:37

标签: java button multidimensional-array

在我们的代码中,我们有一个10 x 10的按钮数组。 我们使用嵌套的for循环创建了10 x 10数组,我们创建按钮没有问题。 此外,我们还可以在单​​击按钮a时显示“按钮单击”。但是我们如何识别点击了哪个按钮?

我们正在使用actionListeners和actionPerformed方法。

6 个答案:

答案 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方法。它可能不是最好的解决方案,最好使用不同的技术,但似乎工作得很好。

虽然这里有一些非常好的想法,谢谢你们!