如何在SWT文本组件中实现自动隐藏滚动条

如何在SWT文本组件中实现自动隐藏滚动条,swt,scrollbar,Swt,Scrollbar,我有一个SWT文本组件,我为它设置了SWT.MULTI、SWT.V_SCROLL和SWT.H_SCROLL,以便在需要时显示滚动条。 我发现,即使内容小于文本组件,在禁用状态下也可以看到滚动条 有什么方法可以自动隐藏滚动条吗?就像java Swing有JScrollPane。水平滚动条根据需要根据您不能隐藏垂直滚动条,它是操作系统(Windows)特定的L&F。您可以通过使用SWT.WRAP而不使用SWT.H\u滚动条摆脱水平条。这种方式适用于所有情况: Text text = new Text

我有一个SWT文本组件,我为它设置了
SWT.MULTI
SWT.V_SCROLL
SWT.H_SCROLL
,以便在需要时显示滚动条。 我发现,即使内容小于文本组件,在禁用状态下也可以看到滚动条


有什么方法可以自动隐藏滚动条吗?就像java Swing有JScrollPane。水平滚动条根据需要

根据您不能隐藏垂直滚动条,它是操作系统(Windows)特定的L&F。您可以通过使用
SWT.WRAP
而不使用
SWT.H\u滚动条
摆脱水平条。这种方式适用于所有情况:

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);
Text Text Text=新文本(父级,SWT.MULTI | SWT.H|u SCROLL | SWT.V|u SCROLL);
Listener scrollBarListener=新的侦听器(){
@凌驾
公共无效handleEvent(事件){
Text t=(Text)event.widget;
矩形r1=t.getClientArea();
矩形r2=t.computeTrim(r1.x,r1.y,r1.width,r1.height);
点p=t.computeSize(SWT.DEFAULT,SWT.DEFAULT,true);

t、 getHorizontalBar().setVisible(r2.width@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);
Text Text Text=新文本(父级,SWT.MULTI | SWT.WRAP | SWT.V|u滚动);
Listener scrollBarListener=新的侦听器(){
@凌驾
公共无效handleEvent(事件){
Text t=(Text)event.widget;
矩形r1=t.getClientArea();
//使用r1.x作为呜呜声,而不是SWT.DEFAULT
矩形r2=t.computeTrim(r1.x,r1.y,r1.width,r1.height);
点p=t.computeSize(r1.x,SWT.DEFAULT,true);

t、 getVerticalBar().setVisible(r2.height你可以使用
StyledText
而不是
Text
StyledText
的方法
setAlwaysShowScrollBars
可以设置为
false

非常好,非常感谢!这对我来说终于奏效了,这是摆脱RAP中水平滑块的唯一方法。你不应该忘记接受answer-?工作正常,但遗憾的是
StyledText
似乎不支持
setEnabled(布尔b)
正确。请参阅