ネストしたJavaのActionListenerの内側からこれを呼び出します
-
06-09-2019 - |
質問
私はこれを持っていると仮定します:
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());
}
}
...
}
他のヒント
external.this
は、それはあなたが望むものだ場合は、外側のクラスのインスタンスにアクセスできるようになります...
あなたはで取得しているが、内部クラスは、その外側のクラスのすべてのメンバーにアクセスすることが正確にわかりません。囲みクラス(例えば、他のメソッドに渡す)の「この」ポインタにアクセスするために使用します。
someMethod(External.this);
あなたの例では、実際には「この」を使用して、それを複雑にしています。ここで動作する2つのオプションがあります:
myFrame.setContentPane(createContentPane());
または
myFrame.setContentPane(External.this.createContentPane());
あなたはすでに同様の方法でMyFrameとにアクセスしていることに注意してください。
まず、あなたがこのようなあなたの外側のクラスでのJFrameを拡張する必要があります。
class External extends JFrame {
.....
.....
}