Java SwingのPaint()
、paintComponent()
、paintComponents()
の実際の違いは何ですか?
Oracleのドキュメントで説明されている内容を理解しようとしましたが、明確ではありません。
Paint()
をオーバーライドします。JApplet
、JFrame
、JWindow
、JDialog
..)、オーバーライドPaint()
。しかし、TLCでペイントする理由はいくつかあります。おそらく別の質問の主題です。paintComponent()
をオーバーライドします。paintComponents()
の呼び出しもせず、必要に応じてAPIに呼び出してもらいます。メソッドをオーバーライドするときは必ず_@Override
_表記も使用してください。
これを行うと、JFrame
でpaintComponent(..)
をオーバーライドしようとする問題が示唆されます(このようなメソッドはありません)。
興味があるかもしれません AWTとSwingでのペイント
見積もり:
AWTの軽量コンポーネントに適用されるルールは、Swingコンポーネントにも適用されます。たとえば、描画するときに、Paint()が呼び出されます。ただし、Swingは、Paint()呼び出しを、次の順序:
protected void paintComponent(Graphics g)
protected void paintBorder(Graphics g)
protected void paintChildren(Graphics g)
Swingプログラムは、Paint()をオーバーライドする代わりにpaintComponent()をオーバーライドする必要があります。 APIで許可されていますが、通常はpaintBorder()またはpaintComponents()をオーバーライドする理由はありません(そうする場合は、何をしているのかを確認してください)。この因数分解により、プログラムは、拡張する必要がある絵の部分のみをオーバーライドすることが容易になります。たとえば、これは前述のAWTの問題を解決します。この問題では、super.Paint()の呼び出しに失敗すると、軽量の子が表示されませんでした。