私はJavaグラフィックスクラスを少し遊んでいて、疑問に思っていました。メソッドを呼び出す必要があるのはrepaint()
いつですか。コメントアウトしてみましたが、出力GUIには影響しなかったようです。しかし、私が読んだJavaGUIコードで多く使用されているのを見てきました。いつ使用するか、いつ使用しないかを説明してもらえますか?
4 に答える
はrepaint()
ビュー (コンポーネント) を更新するため、コンポーネントに変更を加えるたびに呼び出す必要があります。たとえば、グラフィカル コンポーネントを回転する場合repaint()
、含まれているコンポーネントの変更を確認するには、 を呼び出す必要があります。
ほとんどの swing アプリケーションでは、(ボタンのテキスト値の変更やリスト ボックスへのデータの追加などの一般的な操作のために) 自動的に処理されるため、実際に必要になることはありません。
通常、何らかの変更を行った場合にのみ、swing が自動的に反映されません。たとえば、レイアウト マネージャーを使用しておらず、コンポーネントのサイズを手動で変更している場合です (通常、レイアウト マネージャーは必要に応じてコンポーネントを再描画するため)。 .
私が考えることができる唯一のもの:
new Thread() {
@Override
public void run() {
while (ClassName.this.isVisible()) {
ClassName.this.updateStatusLabel();
ClassName.this.validate();
ClassName.this.repaint(50L);
try {
Thread.sleep(1000);
} catch (final InterruptedException e) {
Log.log(e);
}
}
}
}.start();
JDialog のコンストラクターに上記のコードがあるとします。updateStatusLabelが行うことは、パブリックまたはメソッドを介して設定可能なブール変数をチェックし、ベースの JLabel のアイコンをそのようなブール値に設定することです。GUI を検証して再描画しない場合、別のイベント (おそらくユーザーがトリガーしたイベント) がスローされるまで、変更は表示されません。また、ユーザーがラベルに特定のアイコンが表示されるのを待っている場合、たとえば、インターネット経由でデバイスに到達できるかどうかが示されているため、ユーザーは対話しません (または、少なくとも対話を遅らせています)。そんなに)。
アプリケーションを起動すると、GUI が「ペイント」されます。
repaint()
内部で何かを変更したために GUI を再描画したい場合は、呼び出す必要があります。
ボタンを削除する場合は、削除する (または非表示にする) 必要があり、その後、GUI を呼び出すvalidate()
かrepaint()
、再計算 (再描画) する必要があります。