Java JButton数组的操作侦听器
假设我有一个带有2D按钮数组的程序,当你点击其中一个按钮时,它会变成红色。我不想单独声明每个按钮,所以我只是为它们创建了JButton[][]数组。问题是我不知道如何在数组中的任何按钮上使用action listener,因此它会更改此特定按钮的颜色,并且没有任何相关问题与此相关。我尝试使用“for”,但没有帮助:Java JButton数组的操作侦听器,java,swing,jbutton,actionlistener,Java,Swing,Jbutton,Actionlistener,假设我有一个带有2D按钮数组的程序,当你点击其中一个按钮时,它会变成红色。我不想单独声明每个按钮,所以我只是为它们创建了JButton[][]数组。问题是我不知道如何在数组中的任何按钮上使用action listener,因此它会更改此特定按钮的颜色,并且没有任何相关问题与此相关。我尝试使用“for”,但没有帮助: package appli; import javax.swing.*; import java.awt.*; import java.awt.event.*; public c
package appli;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MainW extends JFrame implements ActionListener {
public MainW(){
setSize(640,480);
setTitle("title");
setLayout(null);
JButton[][] btnz = new JButton[5][5];
for(Integer i=0;i<5;i++)
{
for(Integer j=0;j<5;j++)
{
btnz[i][j]= new JButton("");
btnz[i][j].setBackground(Color.WHITE);
btnz[i][j].setBounds(10+20*i,10+20*j,20,20);
add(btnz[i][j]);
btnz[i][j].addActionListener(this);
}
}
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent e){
for(Integer i=0;i<5;i++)
{
for(Integer j=0;j<5;j++)
{
if (e.getSource()==btnz[i][j]);
{
btnz[i][j].setBackground(Color.RED);
}
}
}
}
}
packappli;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
公共类MainW扩展JFrame实现ActionListener{
公共MainW(){
设置大小(640480);
设定所有权(“所有权”);
setLayout(空);
JButton[][]btnz=新JButton[5][5];
对于(整数i=0;i您是否尝试过:
public void actionPerformed(ActionEvent e){
if( e.getSource() instanceof JButton) {
((JButton)e.getSource()).setBackground(Color.red);
}
}
代码可能无法工作的一个原因是JButton[][]
您用来创建按钮的方法是您的MainW
构造函数的本地方法。我提供的方法将允许您忽略此范围问题。它还将删除您的迭代方法,并用更有效的解决方案替换它。在您的代码中,即使事件由列表中的第一项触发,也可以不触发由一个按钮触发,您将始终迭代整个2D数组并测试每个数组