2016-09-14 47 views
0
JButton[] button = new JButton[noOfDays]; 

for(int j=0 ;j<studentNameList.size() ;j++) { 
    for(int i=0 ;i<button.length ;i++) { 
     button[i]=new JButton((i+1)+""); 
     attendencepanels.add(button[i]); 

     button[i].addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
     ----> button[i].setBackground(Color.red); //Local variable refenced from inner class must be final or effective final 

       //JOptionPane.showMessageDialog(null, "test"); 
       } 
      }); 

我怎樣才能解決這個按鈕的問題[I] actionPerformed方法錯誤:從內部類中引用的局部變量必須是最後的或有效的最終

+2

使按鈕陣列最終 – Jens

+0

'最終的JButton []鍵=新的JButton [noOfDays];' –

+0

要麼使其全球類或最終通過@jens –

回答

3

雖然我不知道這件事中,你可能會能夠從ActionEvent e參數獲得JButton參考。看來這就是getSource()回報(The object on which the Event initially occurred):

而不是

button[i].setBackground(Color.red); 

嘗試

JButton button = (JButton) e.getSource(); 
button.setBackground(Color.red); 
+0

感謝它的工作 –

+0

請[接受答案] (http://meta.stackexchange.com/a/5235/155831)如果它幫助解決問題。 –

1

我在這種情況下被修改的變量,所以編譯器無法應付它。給它的非改變參考代替:

for(int j=0 ;j<studentNameList.size() ;j++) { 
     for(int i=0 ;i<button.length ;i++) { 
      JButton btn = new JButton((i+1)+""); // effectively final in that scope 
      button[i] = btn; 
      attendencepanels.add(btn); 
      btn.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        btn.setBackground(Color.red); //works now 
       } 
      }); 
     } 
    } 
相關問題