2016-09-12 10 views
1

У меня есть StyledText виджет (SWT) внутри ScrolledComposite, который должен отображать содержимое файла журнала. К сожалению, в файле журнала есть тысячи строк, поэтому я подошел к точке, где виджет отключил текст после ~ 2200 строк.Как отобразить текст со многими строками внутри ScrolledComposite?

Я нашел this post, который ссылается на this report, который гласит, что существует ограничение по высоте для виджетов в окнах, и моя теория заключается в том, что я достиг этого предела.

Мой вопрос в том, как я могу справиться с этим. Каков обходной путь для отображения текста с таким количеством строк в нем?

EDIT:
я узнал, что это только в том случае, если я использую StyledText внутри ScrolledComposite. Если я использую простой StyledText, проблем нет.

Вот код для воспроизведения:

import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.ScrolledComposite; 
import org.eclipse.swt.custom.StyledText; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 

public class StyledTextLimit { 

    public static void main(String[] args) { 
     Display display = new Display(); 
     Shell shell = new Shell(display); 
     shell.setLayout(new FillLayout()); 

     ScrolledComposite scrollComp = new ScrolledComposite(shell, 
       SWT.H_SCROLL | SWT.V_SCROLL); 

     StyledText text = new StyledText(scrollComp, SWT.NONE); 
     text.setSize(100, 500); 

     scrollComp.setContent(text); 
     scrollComp.setExpandHorizontal(true); 
     scrollComp.setExpandVertical(true); 

     StringBuilder builder = new StringBuilder(); 

     for (int i = 0; i < 5000; i++) { 
      builder.append(i); 

      builder.append(" "); 

      for (int j = 'a'; j < 'a' + 200; j++) { 
       builder.append((char) j); 
      } 

      builder.append("\n"); 
     } 

     text.setText(builder.toString().trim()); 

     scrollComp.setMinSize(text.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 


     // shell.pack(); 
     shell.open(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
     display.dispose(); 
    } 

} 

ответ

0

Я не вижу необходимости обернуть StyledText в ScrolledComposite. StyledText показывает полосы прокрутки самостоятельно, когда это необходимо.

Предлагаю использовать StyledText без ScrolledComposite.

StyledText, конечно, также имеет ограничение на то, какой текст он способен удерживать. Этот предел, однако, должен быть намного выше, чем 2200 строк. Если StyledText все еще переполняется, вам придется обрезать журнал, который будет показан.

+0

Проблема в том, что у меня есть счетчик строк слева от 'StyledText' как' Label', так что мне кажется, что мне все еще нужен 'ScrolledComposite' ... – Raven

+1

Если вы не против зависимости от' org.eclipse.jface.text', вы можете использовать «SourceViewer», который обертывает «StyledText» и позволяет показывать _rulers_ с номерами строк. –

+0

Хорошо, как вы можете видеть в моем отредактированном вопросе, я обнаружил, что проблема, похоже, заключается в 'ScrolledComposite', а не' StyledText' ... – Raven

0

Хотя @ Rüdiger Herrmann помог мне решить мою проблему, я все еще чувствую, что должен помочь тем, кто может прийти к той же проблеме, что и я, без возможности избавиться от ScrolledComposite.

Поэтому я хочу связать this post, что касается проблемы ScrolledComposite.