[解決済み] paintComponentはどのように機能するのですか?
質問事項
とても初歩的な質問かもしれませんが、よろしくお願いします。私はちょうどJavaを学び始めたところです
paintComponentメソッドの動作がよくわかりません。何かを描画したい場合、paintComponentメソッドをオーバーライドしなければならないことは知っています。
public void paintComponent(Graphics g)
{
...
}
しかし、いつ呼び出されるのでしょうか?object.paintComponent(g)" のようなものは見たことがありませんが、それでもプログラム実行時には描画されています。
また、Graphics パラメータとは何ですか?どこの国のものですか?パラメータは、メソッドが呼び出されたときに供給されなければなりません。しかし、先ほども言ったように、このメソッドが明示的に呼び出されることはないようです。では、誰がこのパラメータを提供するのでしょうか?また、なぜGraphics2Dにキャストしなければならないのでしょうか?
public void paintComponent(Graphics g)
{
...
Graphics2D g2= (Graphics2D) g;
...
}
解決方法は?
あなたの質問に対する(非常に)短い答えは、次のとおりです。
paintComponent
Java Swing GUIシステムをブラックボックスとして考える方が簡単な場合もあります。
コンポーネントの再描画が必要になるタイミングは、移動、サイズ変更、フォーカスの変更、他のフレームで隠されるなど、さまざまな要因があります。 これらのイベントの多くは、自動的な魔法で検出され
paintComponent
は、その操作が必要だと判断されたときに、内部で呼び出される。
私は長年Swingを扱ってきましたが、これまで
これまで
という
paintComponent
を直接呼び出したり、他のものから直接呼び出されるのを見たことがあります。 一番近いのは
repaint()
メソッドを使用して、特定のコンポーネントの再描画をプログラムでトリガーします (これは、正しい
paintComponent
メソッドの下流にあります。
私の経験では
paintComponent
が直接オーバーライドされることはほとんどありません。 そのような粒度を必要とするカスタム レンダリング タスクがあることは認めますが、Java Swing には(かなり)堅牢な JComponent と Layouts のセットがあり、それらを使用すれば、直接オーバーライドしなくても重い仕事の多くをこなすことができます。
paintComponent
. ここで私が言いたいのは、独自のカスタムレンダリングコンポーネントを作ろうとする前に、ネイティブのJComponentsとLayoutsで何かできないか確認することです。
関連
-
[解決済み】Android java.lang.IllegalStateException: Android java.lang.IllegalStateException: Could not execute method of the activity
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】Gradleがtools.jarを見つけ出さない
-
[解決済み】文字列中の � を置換する方法
-
[解決済み】Java Error "Exception in thread "main" java.util.InputMismatchException" Array プログラムで発生。
-
[解決済み】Java LinkedListでNodesを使用する
-
[解決済み】Ubuntu: OpenJDK 8 - パッケージを見つけることができません。
-
[解決済み】Javaの".class expected "について
-
[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している