java - 基于交互式输入文本的自调整高度的文本小部件?

标签 java widget swt

使用 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);
 }
}
});

现在,如果我添加一行文本并按回车键添加下一行,这似乎工作正常。当我添加文本行时,文本小部件的高度会增加,而当我删除文本行时,文本小部件的高度会缩小。正如我所愿。但是,当我有环绕的文本并尝试添加新行时,文本小部件的宽度也会调整。我想保持宽度不变,只自己调整高度。

谁能建议我如何让文本小部件自行调整其高度以适合所有输入的文本,同时保持文本小部件的宽度始终固定在规定值?

谢谢。

最佳答案

可能是因为 pack() 重新计算了首选大小。我没有看到任何直接的方法来将首选宽度设置为常量。但是您可以尝试覆盖 computeSize 方法,以便将固定宽度作为提示传递给父类(super class)。

public Point computeSize(int wHint,
                         int hHint,
                         boolean changed)
{
    return super.computeSize(240, hHint, changed);
}

关于java - 基于交互式输入文本的自调整高度的文本小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8287853/

相关文章:

swt - 滚动 Canvas 内容

java - 如何根据需要以编程方式更改锚定 Pane 的高度?

javascript - 难道没有标准的 jQuery 弹出菜单组件吗?

android - 每个小部件实例的不同设置

python - DOM 感知浏览器 Python GUI 小部件

java - SWT中是否有RTF显示小部件

java - 有什么意义可以覆盖 "equals()"中的 "AbstractMap.SimpleEntry<>"吗? "equals()"应该是最终的吗?

java - 如何从文本文件中取出特定行并将其读入数组? ( java )

java - 尝试使用多个一维数组同时读取 Java 中的文件

java - 将静态方法传递给按钮工厂 (Java)