使用SWT和Java,我定义了一个Text小部件,它被设置为多行和包装属性。我添加了一个监听器,它将监视此文本窗口小部件中文本的任何更改,并且我希望如果用户添加新的文本行,或者文本环绕到下一行,窗口小部件的高度会自动更改。因此,如果用户添加新文本或删除文本,我希望文本小部件中的所有文本都可见。以下是我正在尝试做的一个示例:
mTextValue = new Text(compositeEditor, SWT.BORDER | SWT.WRAP | SWT.MULTI);
mTextValue.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
mTextValue.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
mTextValue.addListener(SWT.Modify,new Listener()
{
protected int lines=1;
public void handleEvent(Event e)
{
Text text = (Text) e.widget;
int newlines = text.getLineCount();
if (newlines!=lines)
{
lines=newlines;
height = lines*16;
width = 240;
text.setSize(width,height);
text.getShell().pack(true);
}
}
});
现在,如果我添加一行文本并按返回键添加下一行,这似乎工作正常。当我添加文本行时,文本小部件的高度会增加,而当我删除行时,文本小部件的高度会缩小。就像我想要的那样。但是,当我有文本环绕并尝试添加新行时,文本小部件的宽度也会调整。我想保持宽度固定,只能自我调整高度。
任何人都可以提供一个建议,让我可以让文本小部件自行调整其高度以适应所有输入的文本,但保持文本小部件的宽度始终固定在规定值?
感谢。
答案 0 :(得分:1)
这可能是因为pack()重新计算了首选大小。我没有看到任何直接的方法将首选宽度设置为常量。但您可以尝试重写computeSize
方法,以便将固定宽度作为提示传递给超类。
即
public Point computeSize(int wHint,
int hHint,
boolean changed)
{
return super.computeSize(240, hHint, changed);
}