Используя SWT и Java, у меня есть определенный текстовый виджет, который настроен для многострочных и переносных свойств. Я добавил слушателя, который будет отслеживать любые изменения в тексте внутри этого текстового виджета, и я хочу, чтобы высота виджета автоматически изменялась, если пользователь добавляет новую строку текста или если текст переносится на следующую строку. Итак, я хочу, чтобы весь текст был виден в текстовом виджете, если пользователь добавляет новый текст или удаляет текст. Вот пример того, что я пытаюсь сделать:
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);
}
}
});
Теперь, похоже, это работает нормально, если я добавляю одну строку текста и нажимаю клавишу возврата, чтобы добавить следующую строку. Текстовый виджет увеличивается по высоте, когда я добавляю строки текста, и уменьшается по высоте, когда я удаляю строки. Так же, как я хочу. Но когда у меня есть текст, который оборачивается, и я пытаюсь добавить новую строку, текстовый виджет также изменяется по ширине. Я хочу, чтобы ширина была фиксированной, и только сам регулировал высоту.
Может ли кто-нибудь предложить, как я могу сделать так, чтобы текстовый виджет самостоятельно настраивал его высоту, чтобы соответствовать всему вводимому тексту, но оставлял ширину текстового виджета всегда фиксированной на заданном значении?
Спасибо.