Как реализовать автоматическое скрытие полосы прокрутки в текстовом компоненте SWT - PullRequest
7 голосов
/ 17 декабря 2011

У меня есть текстовый компонент SWT, для которого я установил SWT.MULTI, SWT.V_SCROLL и SWT.H_SCROLL, чтобы при необходимости показывать полосу прокрутки. Я обнаружил, что даже содержание меньше, чем текстовый компонент, а также полоса прокрутки видны в отключенном состоянии.

Есть ли способ, которым я могу автоматически скрыть полосу прокрутки? Как у java Swing есть JScrollPane.horizont_scrollbar_as_needed

Ответы [ 4 ]

8 голосов
/ 09 августа 2014

Вы можете использовать StyledText вместо Text. StyledText имеет метод setAlwaysShowScrollBars, который можно установить на false.

7 голосов
/ 06 ноября 2013

Это работает во всех случаях:

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);
6 голосов
/ 03 июля 2014

@ Пламен: отличное решение, спасибо. У меня была такая же проблема, но для многострочного текста в стиле 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);
1 голос
/ 19 декабря 2011

Согласно это вы не можете скрыть вертикальную полосу прокрутки, это L & F для ОС (Windows). Вы можете избавиться от турника, используя SWT.WRAP без SWT.H_SCROLL.

...