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