Nebula Grid是一个第三方SWT控件,用于以Table和Tree形式显示数据,但是功能比JFace Table和Tree更强大些。
JFace Table 或 Tree在其不显示滚动条时,鼠标滚轮轮动外面控件的滚动条。
当JFace Table 或 Tree 显示滚动条时,鼠标滚轮滚动Table 或 Tree自己。
但是Nebula Grid在不显示滚动条时,不能滚动外面控件的滚动条,这个有点不太user friendly。解决这个问题的方法是:在滚动条不显示时,把它设置成disabled,这样就不会捕获鼠标滚轮事件,可以滚动外面控件的滚轮了。
public static void disableVerticalBarWhenInvisible(GridTableViewer gridTableViewer) { gridTableViewer.getGrid().addPaintListener(event -> { ScrollBar verticalBar = ((Grid) event.widget).getVerticalBar(); if (verticalBar != null && verticalBar.isEnabled() ^ verticalBar.isVisible()) { verticalBar.setEnabled(verticalBar.isVisible()); } }); }
封装成了一个方法,方便使用。在每次paint时,检查滚动条enabled属性是否和visible属性一直,如果不一致,就修改enabled属性。