Eclipse SWT GUI - элемент управления StyledText - одинаковая ширина для каждого символа

Мне нужно создать элемент управления SWT StyledText, который показывает удобочитаемые символы с одинаковым интервалом для каждого символа, как мы видим в «блокноте».

Но когда я создаю текст


    StyledText outputText = new StyledText(scrolledComposite_2, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    scrolledComposite_2.setContent(outputText);
    scrolledComposite_2.setMinSize(outputText.computeSize(SWT.DEFAULT, SWT.DEFAULT));
    outputText.setText(data.toString());
    outputText.setStyleRange(new StyleRange(0, data.toString().length(), CMFUtils.GREEN, CMFUtils.WHITE));

При отображении StyledText в отображаются данные, но ширина каждого символа отличается. Скажем, например, ширина «i» или «» (пробел) меньше, чем у других символов, таких как «S», что вызывает у меня проблемы при указании ошибочного символа с помощью «^» в следующей строке. Например:

вывод>>>>
бла-бла-бла-sdlfk-бла
................^

Как вы можете видеть, ошибка в приведенной выше строке примера возникает в «sdlfk», который находится на 16-м символе, и когда я пытаюсь указать на него, помещая «^» в следующую строку с 16 пробелами (примечание: точки в этом примере будет заменен пробелами в моем исходном выводе), он указывает на другую позицию в строке.


person Parasu    schedule 23.06.2014    source источник


Ответы (1)


Используйте моноширинный шрифт SWT.

Font font = new Font(display, "Monospaced", 12, SWT.NORMAL);
outputText.setFont(font);
// ...
// In SWT: if you created it, you dispose it.
font.dispose();
person sina72    schedule 23.06.2014
comment
Но, пожалуйста, не забудьте dispose() из Font. В противном случае вы создадите утечку памяти. - person Baz; 23.06.2014
comment
Спасибо за Ваш ответ. Но, к сожалению, SWT не принимает его и по-прежнему отображает текст без моно интервала. Один из ответов stackoverflow содержит указатель на эту ошибку < href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=48055" rel="nofollow noreferrer">48055, который описывает это поведение. Поскольку мое SWT-приложение всегда работает в Windows, я планирую использовать Courier New в качестве моноширинного шрифта. - person Parasu; 23.06.2014
comment
@Parasu Кто-то в этом отчете об ошибке опубликовал межплатформенный, потокобезопасный, моноширинный служебный класс шрифта. Возможно, стоит использовать его вместо курьера. - person Baz; 23.06.2014
comment
@Baz да, я не видел этот класс. Это очень полезно. Спасибо, что указали мне. - person Parasu; 30.07.2014