質問

私はこれを持っていると仮定します:

class external {
    JFrame myFrame;
    ...

    class internal implements ActionListener {
        public void actionPerformed(ActionEvent e) {
             ...
             myFrame.setContentPane(this.createContentPane());
        }
    }
    ...
}

createContentPaneは、コンテナを返します。私はこれへのアクセス権を持っていると思いますので、今、私は、それが働くだろうActionListenerの外にこのコードをしていた場合。しかし、その中に、私にはありません。私は、メソッドの内容で更新されようとしているものであるmyFrameへのアクセスを持っているが、私はそれのうちにこれを取得することができない限り、それは、私がやりたいのに十分ではありません。

私はまたcreateContentPane()を使用する他のインスタンス変数からの情報を必要とするので、私は、私はそれがstatic作ることができるかわからない。

役に立ちましたか?

解決

あなたのいずれかを行うことができます:

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コードの規則

他のヒント

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

あなたはで取得しているが、内部クラスは、その外側のクラスのすべてのメンバーにアクセスすることが正確にわかりません。囲みクラス(例えば、他のメソッドに渡す)の「この」ポインタにアクセスするために使用します。

someMethod(External.this);

あなたの例では、実際には「この」を使用して、それを複雑にしています。ここで動作する2つのオプションがあります:

myFrame.setContentPane(createContentPane());

または

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

あなたはすでに同様の方法でMyFrameとにアクセスしていることに注意してください。

まず、あなたがこのようなあなたの外側のクラスでのJFrameを拡張する必要があります。

class External extends JFrame {
.....
.....
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top