Domanda

dire Let Ho un programma con array 2D di pulsanti, e quando si fa clic su una di esse diventa rosso. Non volevo dichiarare ogni singolo tasto separatamente così ho appena creato JButton array [] [] per loro. Il problema è che non so come usare l'azione ascoltatore in uno qualsiasi dei pulsanti nella matrice quindi sarebbe cambiare il colore di questo particolare pulsante, e nessuna delle domande correlate sono relative a questa. Ho cercato di usare "per", ma non aiuta:

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

}
È stato utile?

Soluzione

Hai provato:

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

Una ragione per cui il codice potrebbe non funzionare è che il JButton[][] si utilizza per creare i pulsanti è locale al vostro costruttore MainW. L'approccio che ho fornito vi permetterà di ignorare questo problema dell'ambito. Sarà anche rimuovere il tuo approccio iterativo, e sostituirlo con una soluzione più efficiente. Nel codice, anche se l'evento viene attivato dalla prima voce nella lista, o addirittura non innescato da uno dei tuoi pulsanti, sarà sempre iterate sull'intera matrice 2D e testare ogni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top