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

发布于 2024-12-21 20:34:07 字数 226 浏览 2 评论 0原文

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

有什么办法可以自动隐藏滚动条吗?就像java Swing有JScrollPane.horizo​​ntal_scrollbar_as_needed

I have a SWT Text component, for which I set SWT.MULTI, SWT.V_SCROLL and SWT.H_SCROLL to show the scrollbar when required.
I found that even content is smaller than the text component then also scrollbar are visible in disable state.

Is there is any way through which I can auto hide the scrollbar? Like java Swing has JScrollPane.horizontal_scrollbar_as_needed

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

愿与i 2024-12-28 20:34:07

您可以使用 StyledText 代替 TextStyledText 具有方法 setAlwaysShowScrollBars,可以将其设置为 false

You can use StyledText instead of Text. StyledText has method setAlwaysShowScrollBars which can be set to false.

辞取 2024-12-28 20:34:07

这适用于所有情况:

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);

That works on all cases:

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);
葬花如无物 2024-12-28 20:34:07

@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);

@Plamen: great solution thanks. I had the same problem but for a multiline-text with style SWT.WRAP without a horizontal scrollbar.

I had to change a few things in order to make this work properly:

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);
网名女生简单气质 2024-12-28 20:34:07

根据 this 你无法隐藏垂直滚动条,这是操作系统( Windows)特定的 L&F。您可以通过使用 SWT.WRAP 而不使用 SWT.H_SCROLL 来消除水平条。

According to this you can't hide vertical scroll bar, it's OS (Windows) specific L&F. You can get rid of horizontal bar by using SWT.WRAP without SWT.H_SCROLL.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文