Стилизованный текст setText имеет плохую производительность

У меня мало проблем с StyledText, Когда я использую setText() Метод и текст длинные, я должен подождать несколько секунд для рендеринга этого текста. Есть какой-нибудь метод, который я могу использовать, чтобы ускорить показ этого текста?

1 ответ

Единственная оптимизация, которую вы можете реализовать - это setText() в Job или в Runnable не блокировать пользовательский интерфейс.

Кроме этого, это ограничение API от SWT.

Другие предложения:

  • Подать запрос об ошибке / функции
  • Поиск для StyledText хотя видимо ничего не существует
  • Переосмыслите свою программу. У вас нет резервного плана? Критически ли важна производительность?


    Редактировать:

    greg-449

    /**
     * 
     * @author ggrec
     *
     */
    public class Test
    {
        public static void main(final String[] args)
        {
            new Test();
        }
    
        private Test()
        {
            final Display display = new Display();
            final Shell shell = new Shell(display);
            shell.setLayout(new GridLayout(1, false));
    
            final Button button = new Button(shell, SWT.PUSH);
            button.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
            button.setText("Press me");
    
            final StyledText text = new StyledText(shell, SWT.NONE);
            text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    
            button.addSelectionListener(new SelectionAdapter() 
            {
                @Override public void widgetSelected(final SelectionEvent e)
                {
                    Display.getDefault().asyncExec(new Runnable() 
                    {
                        @Override public void run()
                        {
                            text.setText("*put very long text here*");
                        }
                    });
                }
            });
    
            shell.setSize(1000, 1000);
            shell.open();
            while (!shell.isDisposed())
            {
                if ( !display.readAndDispatch() )
                    display.sleep();
            }
            display.dispose();
        }
    }
    
  • Другие вопросы по тегам