java - Miglayout + hidemode 3 = 显示控件时不需要的自动滚动

标签 java validation swing miglayout

我在 MigLayout 中使用“hidemode 3”,以便隐藏组件根本不可见(并且不会对布局产生任何影响)。

我使用它是为了可以在文本框下方显示内联错误,仅在出现错误时才显示

每当我显示这些内联错误框(它们是文本区域,所以我只调用 setVisible(true))时,嵌入表单的滚动 Pane 会自动向下滚动到设置为可见的任何内容(所以我调用 setVisible(true) )在某些东西上,它会导致布局更改并且滚动 Pane 自动向下滚动到组件所在的位置)

现在,这不是问题 - 我想我明白为什么会发生上述部分(大概是面板改变大小以适应新的布局,导致滚动条的比例变大,所以它出现 向下滚动)

我无法理解的是如何解决它 - 例如我尝试这样做:

// 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() 时,执行“ react ”的方法是什么?是在验证/doLayout() 等期间还是发生了完全独立的事情?

谢谢

最佳答案

刚刚不小心回答了我自己的问题:

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

结果 MigLayout 根本不考虑这个因素(而且上面似乎是在许多情况下重置滚动条的众所周知的机制)

关于java - Miglayout + hidemode 3 = 显示控件时不需要的自动滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5129963/

相关文章:

java - 在java计时器中实现aspectj日志记录

Java-JUnit怎么办?

c# - MVC 3 多个字段的远程验证

asp.net - 使用客户端代码设置并显示自定义验证的错误

ruby-on-rails - 如何在验证中为特定列设置保留字?

java - 如何从自定义 Java 桌面应用程序启动 NXP 产品 JCOPShell (jcshell.bat)

java - JComponent 上用于 Ctrl 键的 KeyListener

java - JButton 中不显示图标

java - 无法使用 Jax-RS 上传文件

java - preProcess 和 postProcess 之间的 resteasy 拦截器线程安全吗?