JButton数组的动作侦听器 [英] Action listener for JButton array

查看:106
本文介绍了JButton数组的动作侦听器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个带有2D按钮阵列的程序,当您单击其中一个按钮时,它会变成红色。我不想单独声明每个按钮,因此只为它们创建了JButton [] []数组。问题是我不知道如何在数组中的任何按钮上使用动作侦听器,因此它会更改此特定按钮的颜色,并且没有与此相关的问题。我尝试使用 for,但无济于事:

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);
                }
            }
        }
    }

}


推荐答案

您是否尝试过:

public void actionPerformed(ActionEvent e){
   if( e.getSource() instanceof JButton) {
       ((JButton)e.getSource()).setBackground(Color.red);
   }
}

您的代码可能无法正常工作的原因之一是 JButton [] [] 用于创建按钮,对于 MainW 构造函数而言是本地的。我提供的方法可以让您忽略此范围界定问题。它还将删除您的迭代方法,并以更有效的解决方案代替它。在您的代码中,即使事件是由列表中的第一项触发的,甚至不是由按钮之一触发的,您也始终会遍历整个2D数组并对其进行测试。

One reason why your code might not work is that the JButton[][] you use to create your buttons is local to your MainW 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.

这篇关于JButton数组的动作侦听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆