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()などの最中ですか、それとも完全に別のことが起こっていますか?
ありがとう