1

すべての UI コンポーネントが XML ファイルで定義されているアプリケーションを開発しています。私はxmlを読み、それに基づいてUIが構成されています。ユーザーがいくつかの変更を行った後、新しい XML が提供され、それに応じて UI が更新されます。今、特にいくつかのスクロール領域で、UI の一部が切り取られている (ウィンドウのサイズを変更したときにのみ表示される) か、スクロールバーが既にあるポイントまでスクロールされている、非常に厄介なレンダリングの問題が発生しますが、コンテンツの先頭を表示します。

これはイベント ディスパッチ スレッドの問題だと思いますが、ここで非常に役立つ情報を見つけました: http://www.javapractices.com/topic/TopicAction.do?Id=153

そこで読むことができます:「このスレッド(EDT)は、コンポーネントが実現された後にアクティブになります:pack、show、またはsetVisible(true)のいずれかが呼び出されました」

XML の解析は EDT では行われず、コンポーネントのインスタンス化とそれらの親パネルへの追加も行われません。すべてのコンポーネントが作成された後でのみ、それらは最終的に EDT を介して MainPane に追加されます。ただし、場合によっては、コンポーネントを作成してパネルに追加すると、すでに EDT が開始されているようです。だから物事はめちゃくちゃになります。

どのメソッドが pack 、 show 、または setVisible(true) を呼び出して EDT を開始するかを詳しく知っている人はいますか?

どうもありがとう

4

1 に答える 1

2

スクロール ペインでも同じ問題が発生しました。次のプロパティを設定してみてください。

scrollpane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);

コメントにあるように、すべての Swing コンポーネントは EDT で作成する必要があります。そうしないと、奇妙なことが起こります。

于 2013-01-07T12:47:56.863 に答える