Java 如何获取单击的JButton的索引?

Java 如何获取单击的JButton的索引?,java,swing,jbutton,Java,Swing,Jbutton,我有一个JButton[][]矩阵。我尝试向存储按钮索引的按钮添加ActionListener 我需要做一个游戏 第一次单击显示应从哪个按钮开始,第二次单击显示从何处开始。您可以将按钮的文本设置为相关索引: //while creating the buttons for(int i = 0; i<buttons.length;i++){ for(int j = 0; j<buttons[i].length;j++){ //create the but

我有一个
JButton[][]
矩阵。我尝试向存储按钮索引的按钮添加
ActionListener

我需要做一个游戏


第一次单击显示应从哪个按钮开始,第二次单击显示从何处开始。您可以将按钮的文本设置为相关索引:

//while creating the buttons
for(int i = 0; i<buttons.length;i++){
    for(int j = 0; j<buttons[i].length;j++){    
        //create the button
        buttons[i][j] = new JButton((""+i*buttons.length+j));
    }
}

与第二次单击非常相似。

您可以将按钮的文本设置为相关索引:

//while creating the buttons
for(int i = 0; i<buttons.length;i++){
    for(int j = 0; j<buttons[i].length;j++){    
        //create the button
        buttons[i][j] = new JButton((""+i*buttons.length+j));
    }
}

与第二次单击非常相似。

在类中创建一个接受索引的方法

public void handleClick(int r, int c) { ... }
创建按钮时,添加一个操作侦听器,该侦听器使用正确的索引调用此方法:

import java.util.stream.IntStream;

buttons = new JButton[rowSize][colSize];
IntStream.range(0, rowSize).forEach(r -> {
    IntStream.range(0, colSize).forEach(c -> {
        buttons[r][c] = new JButton(String.format("%d, %d", r, c));
        buttons[r][c].addActionListener(e -> handleClick(r, c));
    });
});

在类中创建一个接受索引的方法

public void handleClick(int r, int c) { ... }
创建按钮时,添加一个操作侦听器,该侦听器使用正确的索引调用此方法:

import java.util.stream.IntStream;

buttons = new JButton[rowSize][colSize];
IntStream.range(0, rowSize).forEach(r -> {
    IntStream.range(0, colSize).forEach(c -> {
        buttons[r][c] = new JButton(String.format("%d, %d", r, c));
        buttons[r][c].addActionListener(e -> handleClick(r, c));
    });
});

您所需要的可以通过多种方式实现,使用哈希映射、2D数组等。。。以下是我的建议:

继承:您现在需要一个按钮,其中包含两个默认情况下未定义的属性(列和行)


您肯定有一个可以添加jbutton的面板,现在可以添加一个MatrixButton

 panel.add(MatrixButton);
然后添加actionlistener

button1.addActionListener(this);
当你点击时,你可以通过

   @Override
    public void actionPerformed(ActionEvent ae) {
    if (ae.getSource() == this.button1) {
        System.out
            .println(((MatrixButton) ae.getSource()).getRow() + "," + ((MatrixButton) ae.getSource()).getCol());
    } else if (ae.getSource() == this.button2) {
        // TODO
    } else if (ae.getSource() == this.button3) {
        // TODO
    }
    }

您所需要的可以通过多种方式实现,使用哈希映射、2D数组等。。。以下是我的建议:

继承:您现在需要一个按钮,其中包含两个默认情况下未定义的属性(列和行)


您肯定有一个可以添加jbutton的面板,现在可以添加一个MatrixButton

 panel.add(MatrixButton);
然后添加actionlistener

button1.addActionListener(this);
当你点击时,你可以通过

   @Override
    public void actionPerformed(ActionEvent ae) {
    if (ae.getSource() == this.button1) {
        System.out
            .println(((MatrixButton) ae.getSource()).getRow() + "," + ((MatrixButton) ae.getSource()).getCol());
    } else if (ae.getSource() == this.button2) {
        // TODO
    } else if (ae.getSource() == this.button3) {
        // TODO
    }
    }
我尝试将ActionListener添加到存储按钮索引的按钮中

在这种情况下,您可能只需获取事件的对象
ActionEvent.getSource()
,然后迭代按钮数组,直到该对象等于当前索引。有关实现,请参见
findButton(Object)
方法

import java.awt.*;
导入java.awt.event.*;
导入java.awt.image.buffereImage;
导入javax.swing.*;
导入javax.swing.border.EmptyBorder;
公共类按钮索引{
私有JComponent ui=null;
私有JButton[]buttonArray=新JButton[10][5];
JLabel输出=新JLabel(“单击按钮”);
按钮索引(){
initUI();
}
私有void findButton(对象c){
对于(int x=0;x
我尝试将ActionListener添加到存储按钮索引的按钮中

在这种情况下,您可能只需获取事件的对象
ActionEvent.getSource()
,然后迭代按钮数组,直到该对象等于当前索引。有关实现,请参见
findButton(Object)
方法

import java.awt.*;
导入java.awt.event.*;
导入java.awt.image.buffereImage;
导入javax.swing.*;
导入javax.swing.border.EmptyBorder;
公共类按钮索引{
私有JComponent ui=null;
私有JButton[]buttonArray=新JButton[10][5];
JLabel输出=新JLabel(“单击按钮”);
按钮索引(){
initUI();
}
私有void findButton(对象c){
对于(int x=0;x