2011-12-17 32 views
4

我有一個SWT文本組件,爲此我設置了SWT.MULTISWT.V_SCROLLSWT.H_SCROLL以在需要時顯示滾動條。 我發現即使內容小於文本組件,那麼滾動條在禁用狀態下也是可見的。如何在SWT文本組件中實現自動隱藏滾動條

有什麼辦法可以讓我自動隱藏滾動條?像Java Swing也JScrollPane.horizo​​ntal_scrollbar_as_needed

+0

你不應該忘記接受答案 - [當某人回答我的問題時該怎麼辦](http://stackoverflow.com/help/someone-answers)? – berezovskyi

回答

5

能夠在所有情況下工作:

Text text = new Text(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); 

Listener scrollBarListener = new Listener() { 
    @Override 
    public void handleEvent(Event event) { 
    Text t = (Text)event.widget; 
    Rectangle r1 = t.getClientArea(); 
    Rectangle r2 = t.computeTrim(r1.x, r1.y, r1.width, r1.height); 
    Point p = t.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); 
    t.getHorizontalBar().setVisible(r2.width <= p.x); 
    t.getVerticalBar().setVisible(r2.height <= p.y); 
    if (event.type == SWT.Modify) { 
     t.getParent().layout(true); 
     t.showSelection(); 
    } 
    } 
}; 
text.addListener(SWT.Resize, scrollBarListener); 
text.addListener(SWT.Modify, scrollBarListener); 
+0

非常好,非常感謝!這終於爲我工作了,這是擺脫RAP水平滑塊的唯一方法。 – Gregor

+0

這一個應該是一個被接受的答案! – berezovskyi

0

根據this你不能隱藏垂直滾動條,它的操作系統(Windows)具體大號& F.您可以通過使用SWT.WRAP擺脫單槓沒有SWT.H_SCROLL

4

@Plamen:偉大的解決方案的感謝。我遇到了同樣的問題,但對於沒有水平滾動條的SWT.WRAP樣式的多行文本。

我不得不改變,以使這項工作正確的幾件事情:

Text text = new Text(parent, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); 

Listener scrollBarListener = new Listener(){ 
    @Override 
    public void handleEvent(Event event) { 
     Text t = (Text)event.widget; 
     Rectangle r1 = t.getClientArea(); 
     // use r1.x as wHint instead of SWT.DEFAULT 
     Rectangle r2 = t.computeTrim(r1.x, r1.y, r1.width, r1.height); 
     Point p = t.computeSize(r1.x, SWT.DEFAULT, true); 
     t.getVerticalBar().setVisible(r2.height <= p.y); 
     if (event.type == SWT.Modify){ 
      t.getParent().layout(true); 
     t.showSelection(); 
    } 
}}; 
text.addListener(SWT.Resize, scrollBarListener); 
text.addListener(SWT.Modify, scrollBarListener); 
7

可以使用StyledText,而不是TextStyledText有方法setAlwaysShowScrollBars可以設置爲false