0

私はアプレットに取り組んでおり、私のクラスはペイント(Graphics g)メソッドを持つサードパーティのAPIクラスを拡張しています。このクラスは JComponent を拡張し、その paint(Graphics g) から super.paint(g) を呼び出します。ここで、クラスから JComponent ペイント メソッドを直接呼び出したいと思います。これを行う方法はありますか。以下を試しますが、エラーが発生します

getParent().getParent().paint(g);

または、次の方法でこれを理解できます

ThirdPartyClass は JComponent を拡張します{

    public void paint(Graphics g){
     super.paint(g);
     //いくつかの作業
    }
}

MyClass は ThirdPartyClass を拡張します{

   public void paint(Graphics g){
      getParent().getParent().paint(g); // 例外が発生して動作しない
   }
}

4

2 に答える 2

2

メソッドは、getParent()あなたが思っていることをしません。継承やスーパークラスとは関係ありません。このコンポーネントが UI 内にある awt コンテナを返すだけです。

たとえば、コンポーネントがパネル内にあるスクロール ペイン内にある場合、getParent().getParent().paint(g);コンポーネントを呼び出すと、パネルのペイント メソッドが呼び出されます。

ここに画像の説明を入力

于 2012-12-11T12:16:44.153 に答える
2

まず、getParent は継承の親を取得しません。コンポーネントの親を取得するため、たとえ機能したとしても、あなたがしようとしていることはあなたが望むことをしません。

第二に、アプレットの設計を再考する時が来たと思います。継承元のクラスの動作が必要ない場合、なぜ継承するのでしょうか? コンポーネントから継承してみませんか?クラスをThirdPartyのサブクラスにしようとして、すべてではなくThirdPartyの動作の一部をバイパスしようとすると、あらゆる種類の結果が生じる可能性があると思います。

于 2012-12-11T12:17:01.157 に答える