Control类的moveBelow方法有什么作用?

时间:2014-07-01 16:57:42

标签: java swt controls grid-layout

我正在使用带有2列的Gridlayout。我有标签和相应的文本控件。我希望第一个标签的Text控件滑下标签而不是紧挨着它(因为它是一个gridlayout)。为此,我认为moveBelow方法可行,但似乎不是。我是否错误地解释了该方法的使用?

Label label = Components.createLabel(myContainer, SWT.LEFT
                | SWT.WRAP);
        abel.setText("WC Plan Name");
        textName = createTextControl(myContainer, SWT.LEFT);
        textName.moveBelow(label);

private Text createTextControl(Composite parent, int horizontalAlignment)
    {
        final Text textControl = Components.createText(parent, SWT.SINGLE | SWT.BORDER);
        final GridData layoutData = new GridData(horizontalAlignment, SWT.FILL, false, false);
        layoutData.widthHint = 200;
        textControl.setLayoutData(layoutData);
        return textControl;
    }

1 个答案:

答案 0 :(得分:2)

moveBelow()完全按照文档中的说法进行操作:

  

按接收顺序将接收器移动到指定控件下方。如果参数为null,则接收器将移动到绘图顺序的底部。绘图顺序底部的控件将被占据交叉区域的所有其他控件覆盖。

这意味着它可以用于重新排序子项(如果父项的布局允许)。例如,如果您有RowLayout并在最后一个孩子上拨打moveBelow(null),则会将其移至顶部。


现在解决您的问题:您有{2}列GridLayout。从左上角到右下角填充GridLayout。如果您希望两个元素显示在彼此之下而不是彼此相邻,则有两个选项:

  1. 在它们之间添加一个空Label,以便占据第一个元素右侧的空间
  2. 在您的第一个元素中添加GridData,并将GridData#horizontalSpan设置为2。这样它将跨越两列。

  3. <强>更新

    以下是解决方案2的示例:

    public static void main(String[] args)
    {
        final Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setText("StackOverflow");
        shell.setLayout(new GridLayout(4, false));
    
        Text text = new Text(shell, SWT.BORDER);
        text.setLayoutData(new GridData(SWT.BEGINNING, SWT.TOP, false, true, 4, 1));
    
        text = new Text(shell, SWT.BORDER);
        text.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 4, 1));
    
        for (int i = 0; i < 8; i++)
        {
            new Button(shell, SWT.PUSH).setText("Button " + i);
        }
    
        shell.pack();
        shell.open();
    
        while (!shell.isDisposed())
        {
            if (!display.readAndDispatch())
            {
                display.sleep();
            }
        }
        display.dispose();
    }
    

    看起来像这样:

    enter image description here