2011-01-30 11 views
2

おはよう!JavaでJButtonを無効にする際の問題

ボタンをクリックすると、そのボタンを無効にしたいと考えています。次のように私のコードは、..です

for (char buttonChar = 'a'; buttonChar <= 'z'; buttonChar++) { 
     String buttonText = String.valueOf(buttonChar); 
     JButton letterButton = new JButton(buttonText); 
     letterButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       String actionCommand = e.getActionCommand(); 
       System.out.println("actionCommand is: " + actionCommand); 
       letterButton.setEnabled(false); //I disable the button here 
      } 
}); 

しかし、エラーが表示されます。local variable letter Button is accessed from the inner class; needs to be declared finalは...それは何を意味するのでしょうか?どうすれば問題を解決できますか? ありがとうございました...

+0

可能な複製:http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-in-a - 異なる –

答えて

2

は、ボタンを無効にするのではなく、ボタンへの参照にアクセスすることとはまったく関係ありません。

最終的にletterButtonと宣言する必要があります。 Why inner class can access only final variable?

理由は、基本的には、次のとおりである:それは、それは最終的にする必要がある理由ここでは、この

final JButton letterButton = new ... 

JButton letterButton = new ... 

から変更がに良い説明で、あります:あなたのローカル変数は他のスレッドに触れることができません。 ActionListenerのコードは、別のスレッドによって実行される可能性があります。変数finalを作成することで、基本的に値に変換されます。この値は、複数のスレッドで同時に読み取ることができます。

1
JButton letterButton 

最終的な変数または匿名クラスでアクセス可能なクラスフィールド(プライベート/パブリック)のみが存在するため、最終的にする必要があります。見てくださいthis topic

関連する問題