设置 SWT 中多行文本显示的行数

10
我正在使用以下内容来实现文本区域:

I am using following for TextArea

ToolBar bar = new ToolBar(box,SWT.NONE);
ToolItem item = new ToolItem(bar, SWT.SEPARATOR);
Text text = new Text(bar, SWT.BORDER | SWT.MULTI);
item.setWidth(width);
item.setControl(text);

GridData data = new GridData();
data.verticalAlignment = SWT.CENTER;
data.grabExcessHorizontalSpace = true;
data.grabExcessVerticalSpace = true;
text.setLayoutData(data);

我想显示一个多行文本框,目前它可以接受多行文本,但每次只显示一行。

有什么办法可以设置要显示的行数吗?

谢谢。


使用TextArea怎么样?http://docs.oracle.com/javase/tutorial/uiswing/components/textarea.html - chahuistle
@chahuistle 抱歉没有表达清楚,我正在使用SWT而不是Swings。 - nik7
@nik7 你能否将被接受的答案改为另一个答案? - Michael K
2个回答

30

您还可以使用Text.getLineHeight()来确定单行文本的高度,无需使用GC:

final Text text = new Text(container, SWT.BORDER | SWT.WRAP);
GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
gridData.heightHint = 5 * text.getLineHeight();
text.setLayoutData(gridData);

3
+1 好观点,很干净的解决方案!@nik7 请考虑接受这个答案。 - Baz
1
这个解决方案比被接受的那个更加简洁。更易于实现,速度也更快。 - Simon PA

9

你可以使用像素设置高度:

/* Set the height to 75 pixels */
data.heightHint = 75;

然而,您也可以按字符行数设置高度,但是您需要进行一些技巧来测量字符高度。您需要构建一个图形上下文(GC)来测量文本范围。

例如:

GC gc = new GC(text);
try
{
    gc.setFont(text.getFont());
    FontMetrics fm = gc.getFontMetrics();

    /* Set the height to 5 rows of characters */
    data.heightHint = 5 * fm.getHeight();
}
finally
{
    gc.dispose();
}

谢谢,这回答了我的问题。另外,我们也可以使用widthHint属性来设置宽度,以供其他人参考。 - nik7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接