2016-12-03 47 views
0

我有jbuttons的行和列,當每個按鈕被點擊時,它們應該變成紅色,並且當第二次點擊時,它們應該返回到它們的原始顏色。到目前爲止,我寫的代碼如下:Action Listeners

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

將其放在for循環中標記行 btn1 [i] [j] .setBackground(Color.RED); 說'從內部類引用的局部變量必須是最終的或有效的最終,並且不起作用 – May

+0

將btn1變量定義爲final。 –

+0

@paco面板p1位於主面板內。在主面板中,我已經在此處聲明瞭btn1變量,請參閱已編輯的問題以獲取視圖。行btn1 [i] [j] .setBackground(Color.RED);仍然沒有工作。 – May