我有两个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);
这没有作用。我也尝试不使用
ScrolledComposite
标志实例化SWT.V_SCROLL
,但这在运行上述代码时导致空指针异常。滚动条确实需要存在,我只是希望它不可见。那可能吗? 最佳答案
简单回答是不”。
如果您创建的ScrolledComposite
没有SWT.H_SCROLL
或SWT.V_SCROLL
,则无法滚动它,即,调用setOrigin(Point)
或相关方法根本无法执行任何操作。
另一方面,如果启用了滚动条,但要隐藏它们,则操作系统将覆盖您的决定。滚动条由操作系统控制,这意味着操作系统将决定它们是否可见。在setVisible(false)
上调用ScrollBar
只是对操作系统的提示。可能会跟着它走...
很抱歉成为坏消息的承担者:\
您可以尝试将ScrolledComposite
包装在另一个Composite
中,并迫使其将“ScrolledComposite
”的滚动条“裁剪”(通过更改其大小),但这更多的是hack。