我有一個SWT文本組件,爲此我設置了SWT.MULTI
,SWT.V_SCROLL
和SWT.H_SCROLL
以在需要時顯示滾動條。 我發現即使內容小於文本組件,那麼滾動條在禁用狀態下也是可見的。如何在SWT文本組件中實現自動隱藏滾動條
有什麼辦法可以讓我自動隱藏滾動條?像Java Swing也JScrollPane.horizontal_scrollbar_as_needed
我有一個SWT文本組件,爲此我設置了SWT.MULTI
,SWT.V_SCROLL
和SWT.H_SCROLL
以在需要時顯示滾動條。 我發現即使內容小於文本組件,那麼滾動條在禁用狀態下也是可見的。如何在SWT文本組件中實現自動隱藏滾動條
有什麼辦法可以讓我自動隱藏滾動條?像Java Swing也JScrollPane.horizontal_scrollbar_as_needed
能夠在所有情況下工作:
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);
非常好,非常感謝!這終於爲我工作了,這是擺脫RAP水平滑塊的唯一方法。 – Gregor
這一個應該是一個被接受的答案! – berezovskyi
根據this你不能隱藏垂直滾動條,它的操作系統(Windows)具體大號& F.您可以通過使用SWT.WRAP
擺脫單槓沒有SWT.H_SCROLL
。
@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);
可以使用StyledText
,而不是Text
。 StyledText
有方法setAlwaysShowScrollBars
可以設置爲false
。
你不應該忘記接受答案 - [當某人回答我的問題時該怎麼辦](http://stackoverflow.com/help/someone-answers)? – berezovskyi