JButton 数组的操作侦听器
假设我有一个带有 2D 按钮数组的程序,当您单击其中一个按钮时,它会变成红色。我不想单独声明每个按钮,所以我只是为它们创建了 JButton[][] 数组。问题是我不知道如何在数组中的任何按钮上使用操作侦听器,因此它会更改该特定按钮的颜色,并且没有任何相关问题与此相关。我尝试使用“for”,但没有帮助:
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);
}
}
}
}
}
Let's say I have a program with 2D array of buttons, and when you click one of them it turns red. I didn't want to declare every single button seperately so I just created JButton[][] array for them. The problem is that I don't know how to use action listener on any of the buttons in the array so it would change the color of this particular button, and none of related questions is relevant to this. I tried to use "for" but it doesn't help:
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);
}
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您尝试过吗:
您的代码可能无法工作的一个原因是您用来创建按钮的
JButton[][]
是您的MainW
构造函数的本地函数。我提供的方法将允许您忽略这个范围问题。它还将删除您的迭代方法,并用更有效的解决方案取而代之。在您的代码中,即使事件是由列表中的第一项触发的,或者甚至不是由其中一个按钮触发的,您也将始终迭代整个 2D 数组并测试每个数组。have you tried:
One reason why your code might not work is that the
JButton[][]
you use to create your buttons is local to yourMainW
constructor. The approach I have provided will allow you to disregard this scoping issue. It will also remove your iterative approach, and replace it with a more efficient solution. In your code, even if the event is triggered by the first item in your list, or even not triggered by one of your buttons, you will always iterate over the entire 2D array and test each.