Pregunta

Vamos a decir que tengo un programa con matriz 2D de los botones, y cuando se haga clic en uno de ellos se convierte en rojo. No quería declarar cada botón separado por lo que acabo de crear JButton [] [] matriz para ellos. El problema es que no sé cómo utilizar oyente acción en cualquiera de los botones en la matriz de modo que iba a cambiar el color de este botón en particular, y ninguna de las preguntas relacionadas es relevante a este. Traté de usar "para", pero no ayuda:

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

}
¿Fue útil?

Solución

Tiene intentado:

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

Una de las razones por las que su código no será del todo es que el JButton[][] que se utiliza para crear sus botones es local a su constructor MainW. El enfoque que he proporcionado le permitirá hacer caso omiso de este problema de alcance. Además, eliminará su enfoque iterativo, y sustituirla por una solución más eficiente. En su código, incluso si el evento es disparado por el primer elemento de la lista, o incluso no se desencadena por uno de sus botones, que será siempre iterar sobre toda la matriz 2D y probar cada uno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top