我在 MigLayout 中使用了“hidemode 3”,这样隐藏的组件根本不可见(并且对布局没有任何影响)。
我正在使用它,以便我可以在文本框下方显示内联错误,仅在出现错误时显示
每当我显示这些内联错误框(它们是文本区域,所以我只调用 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() 等期间还是发生了完全不同的事情?
谢谢