2016-12-03 7 views
0

У меня есть строки и столбцы кнопок jbuttons, и когда каждая кнопка нажата, они должны быть красными, а при повторном нажатии они должны вернуться к исходному цвету. До сих пор, код, который я написал следующим образом:Слушатели для прослушивания

public class MainPanel extends JPanel 
{ 

    private JButton[][] btn1 = new JButton[3][5]; 

    public MainPanel() 
    { 
     JPanel MainPanel= new JPanel(); 
     MainPanel.setPreferredSize(new Dimension(700,700)); 

     JPanel p1 = new JPanel(); 
     { 
      p1.setLayout(new GridLayout(3,5,10,10)); 
      p1.setBackground(Color.WHITE); 
      for(int i = 0; i < 3; i++) 
       for(int j = 0; j < 5; j++) 
       { 
        btn1[i][j] = new JButton(); 
        btn1[i][j].setBackground(Color.YELLOW); 
        p1.add(btn1[i][j]); 

        btn1[i][j].addActionListener 
        (
         new ActionListener() 
         { 
          public void actionPerformed(ActionEvent e) 
          { 
           btn1[i][j].setBackground(Color.RED); 
          } 
         } 
        ); 
       } 
     } 
    } 
} 

Линия btn1[i][j].setBackground(Color.RED); заявляет "локальные переменные ссылочные из внутреннего класса должно быть окончательным или эффективно окончательным. Кто-нибудь знает, как это исправить?

ответ

0

Добавить слушателей в цикле:

for(int i = 0; i < 3; i++) 
    for(int j = 0; j < 5; j++) { 
     final JButton btn = btn1[i][j]; 
     btn1[i][j].addActionListener(
      new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
        btn.setBackground(Color.RED); 
       } 
      } 
     ); 
    } 

Вы добавили слушателя только к первой кнопке.

+0

Ввод его в петлю для петли вверх по линии btn1 [i] [j] .setBackground (Color.RED); : «Местные переменные, на которые ссылается внутренний класс, должны быть окончательными или фактически окончательными и не работают – May

+0

Определите переменную btn1 как окончательную. –

+0

Панель @paco p1 расположена внутри основной панели. На главной панели я объявил здесь переменную btn1, см. Отредактированный вопрос для представления. Строка btn1 [i] [j] .setBackground (Color.RED); все еще не работает. – May