[英]Set ScrolledComposite's ScrollBar visibility to false in SWT
我有两个ScrolledComposite
并且正在像这样同步它们的垂直滚动位置:
final ScrollBar vScroll1 = canvasScroll.getVerticalBar();
final ScrollBar vScroll2 = titleScroll.getVerticalBar();
vScroll1.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
titleScroll.setOrigin(titleScroll.getOrigin().x, canvasScroll.getOrigin().y);
}
});
vScroll2.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
canvasScroll.setOrigin(canvasScroll.getOrigin().x, titleScroll.getOrigin().y);
}
});
除显示两个ScrolledComposites
的滚动条外,此方法均工作正常。 我只希望一个ScrolledComposite
的滚动条可见,因此我将其可见性之一设置为false:
vScroll2.setVisible(false);
这没有作用。 我还尝试不使用SWT.V_SCROLL
标志实例化ScrolledComposite
,但这在运行上述代码时会导致空指针异常。 滚动条确实需要存在,我只是希望它不可见。 那可能吗?
简单回答是不”。
如果您在没有SWT.H_SCROLL
或SWT.V_SCROLL
情况下创建ScrolledComposite
,则无法滚动,即调用setOrigin(Point)
或相关方法将SWT.V_SCROLL
。
另一方面,如果启用了滚动条,但要隐藏它们,则操作系统将覆盖您的决定。 滚动条由操作系统控制,这意味着操作系统将决定它们是否可见。 在ScrollBar
上调用setVisible(false)
只是对操作系统的提示。 可能会跟着它走...
很抱歉成为坏消息的承担者:\\
您可以尝试将ScrolledComposite
包装在另一个Composite
并强迫它“裁剪”所包含的ScrolledComposite
的滚动条(通过更改其大小),但这更多的是hack。
这篇文章很旧(2014),但是我不得不在这里称一下,因为公认的答案是完全错误的。 除了以下内容,可能还有其他方法可以实现此目的。 像上面的答案那样的回答比根本不回答要糟糕,因为它们具有误导性。
如果在操作系统添加滚动条之后处理的侦听器内部调用[YourScrolledComposite].getHorizontalBar().setVisible(false)
,它将被(重新)隐藏。 这发生在绘制之前(或在绘制事件中),因此实际上永远不会显示滚动条。 这使您可以将ScrolledComposite
保留为SWT.H_SCROLL
(或垂直)标志,并且仍然可以使用[YourScrolledComposite].setOrigin(...)
浏览内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.