Question

Disons que j'ai un programme avec tableau 2D de boutons, et lorsque vous cliquez sur l'un d'eux, il devient rouge. Je ne voulais pas déclarer chaque bouton séparement donc je viens de créer JButton [] [] tableau pour eux. Le problème est que je ne sais pas comment utiliser auditeur d'action sur l'un des boutons du tableau de sorte qu'il changerait la couleur de ce bouton particulier, et aucune de questions connexes sont pertinentes à ce sujet. J'ai essayé d'utiliser « pour », mais il ne permet pas:

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

}
Était-ce utile?

La solution

avez-vous essayé:

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

Une raison pour laquelle votre code pourrait ne pas fonctionner est que le JButton[][] que vous utilisez pour créer vos boutons est local à votre constructeur de MainW. L'approche que j'ai fourni vous permettra de ne pas tenir compte de cette question de portée. Il va également supprimer votre approche itérative, et le remplacer par une solution plus efficace. Dans votre code, même si l'événement est déclenché par le premier élément de votre liste, ou même pas déclenchée par l'un des boutons, vous aurez toujours itérer sur l'ensemble du tableau 2D et tester chacun.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top