用于RCP GUI的布局类型

时间:2013-02-21 17:37:12

标签: java user-interface swt eclipse-rcp rcp

我正在使用GridLayout为我的RCP应用程序创建GUI但是我遇到了问题,因为根据我的理解,GridLayout按照您创建的顺序添加元素/设置其布局数据?因此,这不会为移动元素和添加新元素提供很多/任何灵活性,同时保持先前放置元素的相同布局。

我应该使用其他方法制作我的GUI吗?我需要它灵活,易于指定单个组件的大小和位置,而不是下一个空间中的组件。

目前GridLayout只允许我指定屏幕上的列数,然后指定元素属性(SWT.LEFT, SWT.CENTER)等。

这是我的代码,以显示我的意思:

import javax.annotation.PostConstruct;
import org.eclipse.swt.*;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;

public class CreateUI {

//Text area for the variables
Text variableArea;
Text methodArea;
Text otherArea;
Text fooArea;

@PostConstruct
//Annotation indicates the method is to be called after the class is constructed
public void createInterface(Composite parent){

    int columns =4;

    //Set the layout of the parent (the Part) to a grid layout
    parent.setLayout(new GridLayout(columns, true));

    variableArea = new Text(parent, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
    variableArea.setText("Hello");
    variableArea.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, true, 1, 1));

    methodArea = new Text(parent, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
    methodArea.setText("Hello2");
    methodArea.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, true, 1, 1));

    otherArea = new Text(parent, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
    otherArea.setText("Hello3");
    otherArea.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, true, 1, 1));

    fooArea = new Text(parent, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
    fooArea.setText("Hello4");
    fooArea.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, true, 1, 1));


  }
}

这产生了这个:

目前只有那4个文本区域作为示例,但我稍后会有多个文本区域,按钮,下拉菜单等,我希望能够更容易地格式化它们并自由定位它们。

关于上面的例子,我希望能够将这4个文本区域放在一列中以显示信息,并在剩余空间中自由放置其他元素。

任何指针对我应该使用的东西都很好。

1 个答案:

答案 0 :(得分:1)

MigLayout非常灵活。从内置布局来看,FormLayout也是一个不错的选择,但要比GridLayout更难做到,所以如果你真的发现GridLayout我只推荐使用它不适合的。