繁体   English   中英

在SWT中将ScrolledComposite的ScrollBar可见性设置为false

[英]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_SCROLLSWT.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM