簡體   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