Действие слушателя для JButton Array
-
25-09-2019 - |
Вопрос
Допустим, у меня есть программа с двумя массивами кнопок, и когда вы нажимаете одну из них, он становится красным. Я не хотел объявлять каждую одну кнопку отдельно, поэтому я только что создал jbutton [] [] Array для них. Проблема в том, что я не знаю, как использовать слушатель действий на любую из кнопок в массиве, чтобы он изменил бы цвет этой конкретной кнопки, и к этому не имеет отношения к ним. Я пытался использовать «для», но он не помогает:
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);
}
}
}
}
}
Решение
ты пробовал:
public void actionPerformed(ActionEvent e){
if( e.getSource() instanceof JButton) {
((JButton)e.getSource()).setBackground(Color.red);
}
}
Одна из причин, почему ваш код не может работать, это то, что JButton[][]
Вы используете для создания ваших кнопок, локальные для вашего MainW
конструктор. Подход, который я предоставил, позволит вам игнорировать эту проблему навеса. Он также удалит ваш итеративный подход и заменил его более эффективным решением. В вашем коде, даже если событие запущено первым элементом в вашем списке, или даже не запускается одним из ваших кнопок, вы всегда будете повторять все 2D массив и тестировать каждый.