Я использую 'hidemode 3' в MigLayout, чтобы скрытые компоненты вообще не были видны (и не влияли на макет).
Я использую это для отображения встроенных ошибок под текстовыми полями, которые отображаются только при наличии ошибки
Всякий раз, когда я показываю эти встроенные блоки ошибок (они являются текстовыми областями, поэтому я просто вызываю 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 () и т. Д. До изменения прокрутки, но безрезультатно.
Итак, я предполагаю, что мой вопрос: когда я использую hidemode 3 и вызываю setVisible (), какой метод «реагирует»? Это происходит во время валидации / doLayout () и т. Д. Или происходит нечто совершенно отдельное?
Спасибо