swt:强制文本小部件在换行时打破单词

时间:2011-09-21 09:27:49

标签: swt

我正在为win32或其他支持此功能的Widget寻找解决方案。

我看到另一个问题也是关于这个话题,但是它在GTK上

1 个答案:

答案 0 :(得分:2)

不幸的是,您受到Windows操作系统功能的限制。据我所知,此功能不可用直到Windows Vista。您可能已在此SO链接上找到该行为非常特定于操作系统:Is it possible to modify how Text swt widget wrap word?

您最好的保证是在文本控件上添加修改侦听器,使用GC.textExtent() api计算控件的宽度,使用它计算它可以容纳的字符数(使用GC.getFontMetrics().getAverageCharWidth()并插入在适当的地方换行。如果你选择这种方法,那么请记住你还必须处理resizepaint事件。否则,在调整窗口大小时,逻辑可能会失败。 / p>

如果您试图在“文本”小部件中证明内容(如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();
    }
}