SWT - 隐藏一个孩子时收缩复合材料

时间:2015-08-12 18:10:51

标签: java swt

我有一个GridLayout复合。在第一行只有一些文字。在第二行有一个按钮。如果我按下按钮,我将第一行的文字设置为不可见,但一切都保持不变。我如何“缩小”复合材料,以便隐藏文本下方的所有内容都可以取而代之?

这是我到目前为止所得到的:

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();
    }
} 

1 个答案:

答案 0 :(得分:1)

创建标签时设置布局数据:

GridData labelLayoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
label.setLayoutData(labelLayoutData);

当您更改标签的可见性时,还要设置GridData exclude标记:

label.setVisible(!label.getVisible());

labelLayoutData.exclude = !label.isVisible();

最后致电layout

Composite
composite.layout(true, true);