1

MigLayoutで「hidemode3」を使用しているので、非表示のコンポーネントはまったく表示されません(レイアウトに影響を与えません)。

これを使用して、テキストボックスの下にインラインエラーを表示できるようにします。これは、エラーがある場合にのみ表示されます。

これらのインラインエラーボックスを表示するたびに(テキスト領域なので、setVisible(true)と呼びます)、フォームが埋め込まれているスクロールペインは、表示に設定されているものまで自動的にスクロールダウンします(つまり、何かに対してsetVisible(true)と呼びます)。 、レイアウトが変更され、スクロールペインがコンポーネントがある場所まで下に自動スクロールします)

さて、これは問題ではありません-上記の部分が発生する理由がわかります(おそらく、新しいレイアウトに対応するためにパネルのサイズを変更すると、スクロールバーのスケールがねじ込まれ、下にスクロールするように見えます

私が理解できないのは、それを回避する方法です-たとえば、私はこれをやってみました:

// validateModel will cause the setVisible() calls to occur 
if (!syncControl_.validateModel())
{
    // Here I try and counteract the layout change by going back 
    // to the top 
    variableScrollPane_.getViewport().setViewPosition(new Point(0,0));
}

しかし、それは機能しません-むしろ、それはしばらくの間機能します:スクロールは発生しますが、見かけの「自動スクロール」は数ミリ秒後に発生します。レイアウトをやり直すと、定期的に呼び出されるか、setVisibleが実際に何らかのイベントを発生させるようです。

スクロールが役に立たなくなる前に、validate()、invalidate()repaint()などを呼び出してみました。

したがって、私の質問は次のようになります。hidemode3を使用してsetVisible()を呼び出すと、「反応」を行うのはどのメソッドですか?検証/doLayout()などの最中ですか、それとも完全に別のことが起こっていますか?

ありがとう

4

1 に答える 1

0

私自身の質問に誤って答えただけです:

SwingUtilities.invokeLater(new Runnable() {
      public void run() {
           variableScrollPane_.getVerticalScrollBar().setValue(0);                
      }            
}); 

結局のところ、これはまったく考慮されていません(そして、上記は多くの状況MigLayoutでリセットするためのよく知られたメカニズムのようです)scrollbar

于 2011-03-03T00:20:53.070 に答える