1. ホーム
  2. java

[解決済み】super.paintComponent(g)は何をするのですか?

2022-02-23 04:39:25

質問

とは何ですか? super.paintComponent(g) はどうすればいいのでしょうか(特にpaintComponent()メソッド内に配置した場合)?今までSOでこの質問をする人を見かけなかったので驚いています。

Java Graphicsの学校のノートを掘り出してみると、このコードの行について唯一書かれているのが "do not delete" .

しかし、私はここ数週間、JavaのpaintComponent()メソッドについて練習し、縛り付けています。これまでのところ、私はその行を私のコードに含めていませんし、すべてが(これまでのところ)うまくいっているようです。だから...

質問です。

  1. どのような機能ですか?
  2. どんな時に使うの?
  3. paintComponent()に記述することで、どのような利点があるのでしょうか?

どのように解決するのですか?

<ブロッククオート
  1. 何をするのですか?

をオーバーライドしていないかのように、コンポーネントを表示します。 paintComponent メソッドを使用します。例えば背景色を設定している場合、これは通常、拡張しているクラスによって描画されます。

  1. どんな時に使うの?

コンポーネント全体にペイントしない場合に使用します。塗らない部分は"shine through"つまり、その部分はスーパークラスで塗らせるようにします。例えば、背景色の例のように。例えば背景色の例のように、コンポーネントの真ん中に丸を描くだけでは super.paintComponent は、背景色が円の周りに塗られることを確認します。

もし、あなたが する コンポーネントの領域全体をペイントすると、super.paintComponent がペイントするものの上にペイントすることになり、super.paintComponent を呼び出す意味がありません。

  1. paintComponent()に記述することで、どのような利点があるのでしょうか?

論理的にはそこしかないでしょう。 paintComponent は、コンポーネントを描画すべきときに呼び出されます。前述のように、コンポーネント全体を自分で描画しない場合は super.paintComponent を使い、透ける部分にペイントする。

ドキュメント paintComponent にはよく書いてありますね。

<ブロッククオート

[つまり、このコンポーネントが不透明である場合、背景を完全に不透明でない色で塗りつぶす必要があります。opaque プロパティに従わない場合、視覚的なアーチファクトが発生する可能性があります。