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

Has*_*san 3 java swt scrolledcomposite

我有两个ScrolledComposites,我正在像这样同步它们的垂直滚动位置:

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);
    }
});
Run Code Online (Sandbox Code Playgroud)

这工作正常,除了它显示了两者的滚动条ScrolledComposites。我只希望 oneScrolledComposite的滚动条可见,因此我将其可见性之一设置为 false:

vScroll2.setVisible(false);
Run Code Online (Sandbox Code Playgroud)

这没有效果。我也尝试在ScrolledComposite没有SWT.V_SCROLL标志的情况下实例化,但这会在运行上述代码时导致空指针异常。滚动条确实需要在那里,我只是希望它不可见。那可能吗?

Baz*_*Baz 5

简单回答是不”。

如果你创建了ScrolledCompositewithout SWT.H_SCROLLor SWT.V_SCROLL,它就不能滚动,即调用setOrigin(Point)或相关的方法根本不会做任何事情。

另一方面,如果您启用滚动条,但想隐藏它们,操作系统将覆盖您的决定。滚动条由操作系统控制,这意味着操作系统将决定它们是否可见。调用setVisible(false)aScrollBar只不过是对操作系统的提示。它可能会跟随或不跟随......

很抱歉成为坏消息的承载者:\


可以尝试将 包装ScrolledComposite在另一个中Composite并强制这个“裁剪”包含的滚动条ScrolledComposite(通过更改其大小),但这更像是一种黑客攻击。