2012-06-04 35 views
0

我有此(部分僞)代碼變量和方法和的ActionListener

class a { 
    void b() 
    { 
    int d = 0; 
    JButton c = new JButton(); 
    c.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
     d = 1; 
     } 
    }); 
    } 
} 

但是,這是行不通的,蝕建議增加最終標識符d,但是,使值不可能改變。對不起,如果這是一個愚蠢的問題,但很難爲谷歌形成這樣的問題... 我也不能在方法b上聲明高於方法b的變量。

+1

你實際上想用'd'做什麼?你期望它有什麼範圍? – SirPentor

回答

1

您可能想要在方法外移動d的聲明。

class a { 
    int d = 0; 

    method b() { 
    JButton c = new JButton(); 
    c.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     d = 1; 
    } 
    } 

} 

..並格式化您的代碼。

+0

您不能在ActionListener中更改b()中的任何內容。你必須重新考慮你的代碼。 –

+0

在我無法將方法移出該方法之前,我曾想過,但我只是有一個「尤里卡」時刻...... – Karlovsky120

1

這是因爲代碼:

c.addActionListener(new ActionListener() 
      { 
      public void actionPerformed(ActionEvent e) 
      { 
       d = 1; 
      } 
      });//a little corrected here 

實際上創建了一個新的嵌套類和overridesactionPerformed(ActionEvent e)方法。 由於它不是同一類的一部分,所以安全 java不允許本地變量,而不是聲明的final由該嵌套類方法訪問。