SWT - 隐藏一个 child 时收缩合成
SWT - Shrink composite when one child is hidden
我有一个 GridLayout 组合。第一行只有一些文字。在第二行有一个按钮。如果我按下按钮,我将第一行的文本设置为不可见,但一切都保持不变。我怎样才能 "shrink" 合成以便隐藏文本下方的所有内容都向上移动以取代它的位置?
这是我目前得到的:
public class Main {
public static void main(String[] args) {
Display display = Display.getDefault();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final Composite composite = new Composite(shell, SWT.BORDER);
composite.setLayout(new GridLayout());
final Label label = new Label(composite, SWT.BORDER);
label.setText("Just some text");
Button b1 = new Button(composite, SWT.PUSH);
b1.setText("Button1");
b1.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
label.setVisible(!label.getVisible());
break;
}
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
创建标签时设置布局数据:
GridData labelLayoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
label.setLayoutData(labelLayoutData);
当您更改标签的可见性时,还要设置 GridData
exclude
标志:
label.setVisible(!label.getVisible());
labelLayoutData.exclude = !label.isVisible();
最后调用 Composite
的 layout
composite.layout(true, true);
我有一个 GridLayout 组合。第一行只有一些文字。在第二行有一个按钮。如果我按下按钮,我将第一行的文本设置为不可见,但一切都保持不变。我怎样才能 "shrink" 合成以便隐藏文本下方的所有内容都向上移动以取代它的位置?
这是我目前得到的:
public class Main {
public static void main(String[] args) {
Display display = Display.getDefault();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final Composite composite = new Composite(shell, SWT.BORDER);
composite.setLayout(new GridLayout());
final Label label = new Label(composite, SWT.BORDER);
label.setText("Just some text");
Button b1 = new Button(composite, SWT.PUSH);
b1.setText("Button1");
b1.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
label.setVisible(!label.getVisible());
break;
}
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
创建标签时设置布局数据:
GridData labelLayoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
label.setLayoutData(labelLayoutData);
当您更改标签的可见性时,还要设置 GridData
exclude
标志:
label.setVisible(!label.getVisible());
labelLayoutData.exclude = !label.isVisible();
最后调用 Composite
layout
composite.layout(true, true);