Pergunta

Digamos que eu tenha um programa com uma matriz 2D de botões e, quando você clica em um deles, fica vermelho. Eu não queria declarar cada botão separadamente, então eu apenas criei o JButton [] [] matriz para eles. O problema é que não sei como usar o ouvinte de ação em nenhum dos botões da matriz para que mudasse a cor desse botão em particular, e nenhuma das perguntas relacionadas é relevante para isso. Eu tentei usar "para", mas isso não ajuda:

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

}
Foi útil?

Solução

você tentou:

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

Uma razão pela qual seu código pode não funcionar é que o JButton[][] Você usa para criar seus botões é local para o seu MainW construtor. A abordagem que forneci permitirá que você desconsidere esse problema de escopo. Ele também removerá sua abordagem iterativa e a substituirá por uma solução mais eficiente. No seu código, mesmo que o evento seja acionado pelo primeiro item da sua lista, ou mesmo não acionado por um dos seus botões, você sempre itera por toda a matriz 2D e testará cada um.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top