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