如何根据要显示的文本在 SWT 中定义文本的长度?

How to define the length of a Text in SWT depending on the text to display?

我有一个文本,它将显示不同长度的不同数据。最初我使用的是固定长度的文本框。但是,显然它没有用。 然后,我尝试获取文本的长度,使用该长度作为 Text 的宽度,就像这样 -

textName = new Text(composite, SWT.BORDER);
String myText = tree.getSelection()[0].getText();
int length = myText.length();
textName.setBounds(76, 28, length, 21);
textName.setText(myText);

但是,我发现字符串的长度和 SWT 中 Text 字段的宽度是完全不同的。 那么,有没有为此目的的解决方案?显然,我可以为宽度设置更高的值。但是,我认为这不是一个好的解决方案。

您可以让 Text 对象计算其默认大小。
首先设置文本,然后调用 computeSize 计算文本字符串的屏幕像素大小:

Text textName = new Text(composite, SWT.BORDER);
String myText = tree.getSelection()[0].getText();
textName.setText(myText);
Point size = textName.computeSize(SWT.DEFAULT, SWT.DEFAULT);
textName.setBounds(76, 28, size.x, 21);

您可以通过以下方式计算当前字体大小和类型的字符串大小:

GC gc = new GC(textName);
Point textSize = gc.textExtent(myText);
gc.dispose();

textSize 以像素为单位提供文本大小。然后您可以确定要设置的文本控件的大小。