2009-02-24 10 views
5

内側からこれを呼び出すと、私はこれがあるとします。今、もし私がActionListenerの外でこのコードを実行していたのであれば、私はこれにアクセスできるのでうまくいくでしょう。しかし、その中には、私はしません。私はmyFrameにアクセスしていますが、これはメソッドの内容で更新されるものですが、これを得ることができない限り、私が望むことをするには十分ではありません。ネストしたJavaのActionListener

createContentPane()を使用するには、他のインスタンス変数の情報も必要です。したがって、私はそれをstaticにすることはできません。

答えて

9

次のいずれかが可能ですによって

myFrame.setContentPane(createContentPane()); 

または

myFrame.setContentPane(external.this.createContentPane()); 

Javaクラスでは、最初の文字は通常大文字です。そのような名前を付けないと、あなたのコードはコンパイルされて実行されますが、他のコードを読むことができるコーディング規則に従うことで、コードを読むことができるようになります。

は、これはより良いスタイルのようになります。

class External { 
    JFrame myFrame; 
    ... 

     class Internal implements ActionListener { 
      public void actionPerformed(ActionEvent e) { 
       ... 
       myFrame.setContentPane(createContentPane()); 
       //Or myFrame.setContentPane(External.this.createContentPane()); 
      } 
     } 
    ... 
} 

Java Code conventions

+0

うれしい私はこれを見つけました。私が必要としていたもの(400回目)。私はちょっと混乱して無関係なので、大文字の手紙は言及しないように質問とこの答えを調整するように誘惑されていますが、私はしません。ありがとう+1 –

1

あなたは何を得ているのかはっきりしませんが、内部クラスはその囲むクラスのすべてのメンバーにアクセスできます。包含するクラスの「この」ポインタにアクセスするために使用する(例えば、他の方法に渡す):あなたの例では

someMethod(External.this); 

を、あなたは実際には「この」を使用して、それを複雑にしています。

myFrame.setContentPane(createContentPane()); 

か:あなたはすでに同様の方法でMyFrameとにアクセスしている

myFrame.setContentPane(External.this.createContentPane()); 

注ここで動作する2つのオプションがあります。

+0

なんてこったようなあなたの外側のクラスでのJFrameを拡張する必要があります。 - )+1 –

+0

彼らは休憩です:)ありがとう。 –

2

external.thisそれはあなたが望むものだ場合は、外側のクラスのインスタンスにアクセスできるようになります...

0

まずあなたが8秒で私を打つ、この

class External extends JFrame { 
..... 
..... 
}