質問

レッツ・言う私は、ボタンの2D配列を持つプログラムを持っている、とあなたがそれらのいずれかをクリックしたときに、それが赤に変わります。私はちょうどそれらのためのJButton [] []配列を作成しましたので、別途ひとつひとつのボタンを宣言したくありませんでした。問題は、私はそれがこの特定のボタンの色を変更しますので、配列内のいずれかのボタンにアクションリスナーを使用する方法がわからない、との関連の質問のどれもが、これに関連していないということです。私は「のために」を使用しようとしたが、それは解決しない。

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コンストラクタに対してローカルであるということです。私が提供したアプローチは、あなたがこのスコープの問題を無視することができます。また、あなたの反復的なアプローチを削除し、より効率的なソリューションでそれを置き換えます。あなたのコードでは、イベントはあなたのリストの最初の項目によってトリガ、あるいはあなたのボタンのいずれかによってトリガされていない場合でも、あなたは常に全体の2次元アレイと、テストごとを反復処理します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top