1

私はJavaGUI開発に苦労しています(!)。明らかに意味のあるこれらの小さなことはすべて機能しません。私がやろうとしていることと失敗している場所を説明します(これは非常に苛立たしいことです):

パネル内にあるこのgraphics2dオブジェクトがあります。これで、このグラフィックは画像​​を描画します。これを続けて、永遠に描画することができます。この絵は水平方向に拡大していて、どのサイズが期待できるかわからないので、スクロールペインの中に入れました。ここで、痛みの反復ごとにJPanelのサイズを変更し、setPreferredSizeをより大きな値に設定して、スクロールペインのノブを拡張します。

問題:ペイントからsetPreferredSizeを呼び出すと、何らかの理由で何も実行されません。パネルで呼んでいます。paintを呼び出す関数からsetPreferredSizeを呼び出そうとすると、サイズ変更操作が1回だけ実行されます。

その理由は何でしょうか?

それとは別に、別の小さな質問があります。解決したいのです。グラフィックスの描画が進み、時間の経過とともにサイズが大きくなるので、スクロールペインの位置をどのように進めることができますか?徐々に増やしていきますか?

皆さん、どうもありがとうございました。私は確かにここで助けが必要です

4

4 に答える 4

6

推奨されるサイズは、その名前では必須ではありません...多分pack()またはrevalidate()が役立つでしょう...

于 2009-09-06T20:11:05.017 に答える
2

あなたがいくつかの間違いを犯したように私には聞こえます。

  • paintメソッド内に任意のサイズ属性(実際にはコンポーネントの任意の属性)を設定すると、ペイントがいつどのくらいの頻度で呼び出されるかがわからないため、奇妙な動作が発生する可能性があります。

  • あなたは通常、自分自身をペイントとは呼びません。コンポーネントが表示されると、Swing自体によって呼び出されます

  • 私がそれを正しく理解した場合、あなたはコンポーネントを持ちたいと思うでしょう、それは時間とともに成長します。私見正しいアプローチは、タイマーを作成することです。タイマーを使用して、必要に応じてサイズを変更します。ペイント方法では、この情報を読んで、それを使用して何をペイントするかを決定します。

于 2009-09-06T19:59:37.613 に答える
1

setPreferredSizeは、実際にLayoutManagerが設定されている場合に、コンポーネントのコンテナーのレイアウトを管理しているLayoutManagerに与えることができる多くのヒントの1つです。それらのヒントをどのように処理するかは、指定されたLayoutManager次第です。

Swingコンポーネントのレンダリングがどのように機能するかについての詳細な説明については、本FilthyRichClientsを確認することをお勧めします。

于 2009-09-06T20:24:13.743 に答える
1

set(Preferred / Minimal / Maximum)Size()は、親コンポーネントとそのレイアウトマネージャーへのヒントにすぎず、コンポーネントが取得するスペースの量にすぎないことに注意してください。さらに、これらのサイズは、コンポーネントがレイアウトされている場合にのみ解釈されることに注意してください(最初のレンダリング時に、invalidate()など)。

于 2009-09-06T20:26:27.707 に答える