Java 检测在2D数组中单击的按钮

Java 检测在2D数组中单击的按钮,java,button,multidimensional-array,Java,Button,Multidimensional Array,在我们的代码中,我们有一个10乘10的按钮数组。 我们使用嵌套的for循环创建了10×10数组,创建按钮没有问题。 此外,我们有它,所以当一个按钮a被点击时,它显示按钮点击。但是,我们如何识别单击了哪个按钮 我们正在使用actionListeners和actionPerformed方法。两个简单的解决方案,但可能不是最好的: button类实现自己的侦听器 您还可以测试每个按钮,看看它是否等于action.getSource对象。 或者简单地将button类转换到getSource以使用检索到的

在我们的代码中,我们有一个10乘10的按钮数组。 我们使用嵌套的for循环创建了10×10数组,创建按钮没有问题。 此外,我们有它,所以当一个按钮a被点击时,它显示按钮点击。但是,我们如何识别单击了哪个按钮


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

两个简单的解决方案,但可能不是最好的:

button类实现自己的侦听器

您还可以测试每个按钮,看看它是否等于action.getSource对象。
或者简单地将button类转换到getSource以使用检索到的按钮。

两个简单的解决方案,但可能不是最好的:

button类实现自己的侦听器

您还可以测试每个按钮,看看它是否等于action.getSource对象。 或者简单地将ButtonClass转换为getSource,以便能够使用检索到的按钮。

您可以对事件调用getSource方法

或者,您可以在按钮中使用操作类,并在构建按钮时创建每个按钮的新实例。

您可以对事件调用getSource方法


或者,您可以在按钮中使用操作类,并在构建按钮时为每个按钮创建一个新实例。

我假设这是一个JButton。您可以使用setActionCommandcommand+行+-+列。然后在监听器中,只需说getActionCommand来查看单击了哪个按钮。

我假设这是一个JButton。您可以使用setActionCommandcommand+行+-+列。然后在监听器中,只需说getActionCommand即可查看单击了哪个按钮。

将所有按钮放在一个列表中,在内部循环中轻松完成,使列表可供ActionListener使用,例如作为外部类的属性;我不知道你们众多的团队是如何安排听众的,所以我不能提供任何细节。然后打电话:

  int buttonIndex = listWithButtons.indexOf(event.getSource())
如果您想知道按钮的精确坐标,可以通过以下公式计算:

int row = buttonIndex / 10;
int col = buttonIndex % 10;

将所有按钮放在一个列表中,在内部循环中轻松完成,使列表可供ActionListener使用,例如作为外部类的属性;我不知道你们众多的团队是如何安排听众的,所以我不能提供任何细节。然后打电话:

  int buttonIndex = listWithButtons.indexOf(event.getSource())
如果您想知道按钮的精确坐标,可以通过以下公式计算:

int row = buttonIndex / 10;
int col = buttonIndex % 10;

您可以像这样使用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");
  }
}

您可以像这样使用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");
  }
}

我们最终在actionPerformed内部使用了一个嵌套的for循环,该循环在2d数组中运行并从那里调用action方法。这可能不是最好的解决方案,使用不同的技术可能是最好的,但似乎效果不错


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

我们最终在actionPerformed内部使用了一个嵌套的for循环,该循环在2d数组中运行并从那里调用action方法。这可能不是最好的解决方案,使用不同的技术可能是最好的,但似乎效果不错


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

我们没有使用JButtons,很抱歉没有澄清这一点。我们没有使用JButtons,很抱歉没有澄清这一点。