如何设置GWT DataGrid的滚动条的样式

时间:2014-06-04 11:25:48

标签: java gwt

覆盖GWT DataGrid滚动条样式的正确方法是什么?更具体地说,我希望恒定不透明度为1.0,而不是默认的过渡效果。

似乎无法将自定义资源传递给DataGrid中使用的CustomScrollPanel,默认情况下,CustomScrollPanel会为其滚动条设置默认的透明资源。

我已经尝试了以下内容:

  • 调用setHorizo​​ntalScrollbar / setVerticalScrollbar设置新的滚动条。因为我无法访问DataGrid中的CustomScrollPanel属性(tableDataScroller),所以这不起作用。

  • 将NativeHorizo​​ntalScrollbar.Style和NativeVerticalScrollbar.Style添加到我的CssResource并覆盖css中的nativeHorizo​​ntalScrollbarStyle和nativeVerticalScrollbarStyle。如果没有办法传递资源,这似乎不起作用。

  • 使用:: - webkit-scrollbar selector和friends覆盖浏览器滚动条样式。虽然这适用于我的UI中的其他滚动条,但对于某些DataGrid滚动条属性,不透明度转换效果仍然存在。

1 个答案:

答案 0 :(得分:1)

选项1通常是要采用的方式(或者至少应该如何使用CssResource注入来覆盖窗口小部件样式)。不幸的是,正如您所猜测的那样,DataGrid不会暴露其内部CustomScrollPanel(请参阅相关的issue)。

按照问题中的建议扩展DataGrid以展示其内部CustomScrollPanel。这样你就可以用你想要的任何东西替换滚动条样式(和/或滚动条本身)(使用setHorizontalScrollbar() / setVerticalScrollbar())。

public class EnhancedDataGrid extends DataGrid {

  /**
   * Expose the inner CustomScrollPanel.
   */
  public CustomScrollPanel getScrollPanel() {
    HeaderPanel headerPanel = (HeaderPanel) getWidget();
    return (CustomScrollPanel) headerPanel.getContentWidget();
  }
}

或者您可以决定让它实现HasScrolling以公开ScrollPanel滚动合约的所有方法(只会委托给getScrollPanel()方法)。