SWT 网格布局对齐
SWT gridlayout align
将所有小部件放在一个容器中时,网格布局可以正常对齐。
但出于某种原因,我需要将一些小部件放入子容器中,例如下面的复合材料。对齐方式不同
那么问题来了:有没有对gridlayout没有影响的容器?
Ps:我知道可以使用白色 space 作为解决方法,但是...
代码:
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
GridLayoutFactory.fillDefaults().numColumns(2).margins(8, 3).applyTo(shell);
new Label(shell, 0).setText("Label1");
new Text(shell, 0);
new Label(shell, 0).setText("A long Label");
new Text(shell, 0);
Composite composite = new Composite(shell, 0);
GridDataFactory.fillDefaults().span(2, 1).applyTo(composite);
GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);
new Label(composite, 0).setText("Label22");
new Text(composite, 0);
new Label(composite, 0).setText("Label223");
new Text(composite, 0);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
结果:
没有可以这样使用的容器。坚持使用单一复合材料是迄今为止对齐标签的最简单方法。
可以指定标签的widthHint
或GridData
来指定宽度。您必须使用类似以下内容来计算所需的宽度:
List<Control> labels = ... list of Label controls
final int width = labels.stream()
.mapToInt(label -> label.computeSize(SWT.DEFAULT, SWT.DEFAULT).x)
.max()
.getAsInt();
final var labelData = GridDataFactory.swtDefaults().hint(width, SWT.DEFAULT);
labels.forEach(labelData::applyTo);
将所有小部件放在一个容器中时,网格布局可以正常对齐。
但出于某种原因,我需要将一些小部件放入子容器中,例如下面的复合材料。对齐方式不同
那么问题来了:有没有对gridlayout没有影响的容器?
Ps:我知道可以使用白色 space 作为解决方法,但是...
代码:
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
GridLayoutFactory.fillDefaults().numColumns(2).margins(8, 3).applyTo(shell);
new Label(shell, 0).setText("Label1");
new Text(shell, 0);
new Label(shell, 0).setText("A long Label");
new Text(shell, 0);
Composite composite = new Composite(shell, 0);
GridDataFactory.fillDefaults().span(2, 1).applyTo(composite);
GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);
new Label(composite, 0).setText("Label22");
new Text(composite, 0);
new Label(composite, 0).setText("Label223");
new Text(composite, 0);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
结果:
没有可以这样使用的容器。坚持使用单一复合材料是迄今为止对齐标签的最简单方法。
可以指定标签的widthHint
或GridData
来指定宽度。您必须使用类似以下内容来计算所需的宽度:
List<Control> labels = ... list of Label controls
final int width = labels.stream()
.mapToInt(label -> label.computeSize(SWT.DEFAULT, SWT.DEFAULT).x)
.max()
.getAsInt();
final var labelData = GridDataFactory.swtDefaults().hint(width, SWT.DEFAULT);
labels.forEach(labelData::applyTo);