swt: заставляет текстовый виджет разбивать слова при переносе строк - PullRequest
0 голосов
/ 21 сентября 2011

Я ищу решение для win32 или другого виджета, который поддерживает это.

Я видел другой вопрос, также по этой теме, но он на GTK

1 Ответ

2 голосов
/ 30 сентября 2011

К сожалению, вы ограничены возможностями ОС Windows. Насколько я знаю, эта функциональность недоступна до Windows Vista. Поведение зависит от ОС, как вы могли узнать по этой ссылке SO: Можно ли изменить способ переноса слова виджетом Text SWT?

Ваша лучшая гарантия - добавить изменяющий прослушиватель в текстовый элемент управления, рассчитать ширину элемента управления, используя GC.textExtent() api, с помощью которого вычислить количество символов, которые он может удерживать (используйте GC.getFontMetrics().getAverageCharWidth() и вставьте разрыв строки в соответствующие места. Также, если вы выбираете этот подход, имейте в виду, что вы должны также обработать событие resize или paint. В противном случае при изменении размера вашего окна логика может дать сбой.

Если вы пытаетесь обосновать содержимое (например, MS Office) в текстовом виджете, вам следует искать SWT StyledText widget. Например:

enter image description here

>>Code

Взято отсюда Java2s StyledText .

package test;

import org.eclipse.swt.SWT;
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 StyledTextIndentAlignmentJustify 
{
    public static void main(String[] args) 
    {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());
        StyledText styledText = new StyledText(shell, SWT.WRAP | SWT.BORDER);

        String text =  "The third paragraph is justified. Like alignment, justify only works " +
        "when the StyledText is using word wrap. If the paragraph wraps to several lines, " +
        "the justification is performed on all lines but the last one.";

        styledText.setText(text);
        styledText.setLineJustify(0, 1, true);

        shell.setSize(300, 400);
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...