设置文本后保持SWT文本框大小

时间:2017-03-14 22:41:36

标签: java eclipse swt

当我在一个或两个setText()字段上使用Text时,会将字段的大小调整为文本的长度。我该如何防止这种情况发生?

inner = new Composite(middle, SWT.NONE);
inner.setLayout(new GridLayout(5, false));

chkbxBtn = new Button(inner, SWT.CHECK);
chkbxBtn.setText("Check box button: ");
chkbxBtn.setSelection(false);

new Label(inner, SWT.NONE).setText("Text field 1: ");
startCol = new Text(inner, SWT.BORDER | SWT.NONE);

new Label(inner, SWT.NONE).setText("Text field 2: ");
endCol = new Text(inner, SWT.BORDER | SWT.NONE);

2 个答案:

答案 0 :(得分:3)

为了澄清,在更改Text控件(或一般控件)的文本(或任何其他属性)后,SWT不会重新布局。这是您的代码或调整大小事件导致重新布局。

如果您希望控件具有预设大小,并且其父级使用GridLayout,则可以将GridData设置为widthHint,如下所示:

GridData gridData = new GridData();
gridData.widthHint = ...
text.setLayoutData( gridData );

但是,尝试控制小部件的大小通常是一个坏主意。因此,请确保您的布局策略与UI设计的最佳实践保持一致。

答案 1 :(得分:0)

在某些情况下,更改文字会触发组件重新布局。例如,将错误消息显示为文本验证结果(我在SWT表单中找到了它)。 在GridData中为文本组件设置宽度提示可以解决此问题。宽度提示可以设置为0或所需的最小大小。

    GridDataFactory.swtDefaults()//
            .grab(true, false)//
            .hint(0, SWT.DEFAULT)// width hint prevents text from expanding to full line
            .align(SWT.FILL, SWT.CENTER)//
            .applyTo(text);