Frage

Lassen Sie uns sagen, ich habe ein Programm mit 2D-Array von Schaltflächen, und wenn Sie einer von ihnen klicken, um es färbt sich rot. Ich wollte nicht separat jede einzelne Taste erklären, so dass ich nur für sie JButton [] [] Array erstellt. Das Problem ist, dass ich weiß nicht, wie auf eine der Schaltflächen in der Gruppe Aktion Hörer zu verwenden, damit es die Farbe dieser speziellen Taste ändern würde, und keiner von verwandten Fragen ist relevant für diesen. Ich habe versucht, „für“ zu verwenden, aber es hilft nicht:

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

}
War es hilfreich?

Lösung

Sie haben versucht:

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

Ein Grund, warum der Code nicht funktionieren könnte, ist, dass die JButton[][] Sie verwenden, um Ihre Schaltflächen zu erstellen, ist lokal für Ihren MainW Konstruktor. Der Ansatz, den ich zur Verfügung gestellt haben, können Sie diesen Scoping Problem ignorieren. Es wird auch Ihre iterativen Ansatz entfernen und ersetzen sie durch eine effizientere Lösung. In Ihrem Code, auch wenn das Ereignis durch das erste Element in der Liste ausgelöst wird, oder auch nicht durch eine der Tasten ausgelöst, werden Sie immer Iterierte über das gesamte 2D-Array und testen jeden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top