我有一个SWT Text组件,我设置了它SWT.MULTI,SWT.V_SCROLL并SWT.H_SCROLL在需要时显示滚动条.我发现即使内容小于文本组件,滚动条也会在禁用状态下可见.
有什么办法可以自动隐藏滚动条吗?像java一样,Swing有JScrollPane.horizontal_scrollbar_as_needed
小智 7
这适用于所有情况:
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);
Run Code Online (Sandbox Code Playgroud)
@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);
Run Code Online (Sandbox Code Playgroud)