0

これはばかげた質問のように思えるかもしれませんが、オブジェクトがインスタンス化したオブジェクトからメソッドを呼び出すことは可能ですか?

具体的には、JFrame を拡張して GUI を提供するクラス A と、さまざまなコンポーネントを備えたタイプ JPanel のクラス B および C がある場合、クラス A オブジェクトは B と C の間で変化し、ユーザーに異なるコンテンツを表示します。クラスBのオブジェクトが、B内にクラスAの別のオブジェクトを作成せずにクラスAのメソッドを呼び出し、その中にBを持つ上位のAオブジェクトを呼び出すことは可能ですか?

4

5 に答える 5

1

私が見る最も簡単な方法は、パラメーターまたは A インスタンスを保持し、セッターを持つ B/C への拡張を介して、A を B と C の両方に渡すことです。

于 2012-07-18T10:55:26.093 に答える
1

このようなものが必要なようです。

    class A {
        private B b;
        public void method() {
            b = new B(this);
        }
    }

    class B {
        private A a;
        public B(A a) {
            this.a = a;
        }
        void callAMethod() {
            a.method();
        }
    }
}
于 2012-07-18T11:01:55.343 に答える
0

最善の解決策は、インスタンス化を行うコードが、作成中または作成したオブジェクトへの参照を渡すことです。

理論的には、オブジェクトがそれを作成したクラスを見つけることは可能です(を作成し、Exceptionそのスタック トレースを調べることによって) ... しかし、実行中のアプリケーション内でインスタンスを作成していることを見つける方法はありません。

于 2012-07-18T11:01:27.297 に答える
0

たとえば、セッターを使用するか、コンストラクターパラメーターとして渡すことにより、Bまたは/およびCオブジェクトを作成したAオブジェクトへの参照を配置することができます。

class A extends JFrame{
    void someMethod(){System.out.println("methods body");}
    public static void main(String[] args) {
        A a=new A();
        B b=new B();
        b.setCreator(a);
        b.test();
    }

}
class B extends JPanel{
    private A creator;
    public void setCreator(A creator) {
        this.creator = creator;
    }

    void test(){
        creator.someMethod();
    }
}
于 2012-07-18T11:00:04.723 に答える
0

また、Swing フレームワークには、 getParent()getRoot( ) など、コンポーネントの階層を取得するさまざまな方法が存在することも考慮してください。

于 2012-07-18T11:00:59.353 に答える