Eclipse Plug-in - Set GridData to create Table Layout

在Eclipse Plug-in內,我們有機會建置一個視窗來擺放相關的UI操作介面,假設我們要設定三

欄來擺放,且第二欄內有幾個按鈕那要怎麼設定呢? 如下:


首先,我們可以先設定這個視窗composite的layout,然後assign進composite內的元件(ex. 

Button、List、Label、Text)就必須設定要跨幾個欄的部分了! 相關程式碼如下:

PS. 本範例是extends TitleAreaDialog的dialog example

您可以在其他頁面new自己建立的dialog class,然後利用object.open()即可以彈出這個視窗!

  1. @Override
  2. protected Control createDialogArea(Composite parent) {
  3. Composite composite = new Composite(parent, SWT.NONE | SWT.BORDER);
  4. GridLayout layout = new GridLayout(3, false);
  5. composite.setLayout(layout);
  6. Label label = new Label(composite, SWT.NONE);
  7. label.setText("Workspace set name");
  8. label.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 3, 1));
  9. Text inputSetName = new Text(composite, SWT.BORDER);
  10. inputSetName.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 3, 1));
  11. label = new Label(composite, SWT.NONE);
  12. label.setText("Workspace Set content");
  13. label.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 3, 1));
  14. GridData grid = new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 4);
  15. grid.widthHint = 200;
  16. grid.heightHint = 200;
  17. notgroupSets.setLayoutData(grid);
  18. setButtonInitialize(new Button(composite, SWT.NONE), "Add ->");
  19. List groupSets = new List(composite, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL);
  20. grid = new GridData(SWT.RIGHT, SWT.TOP, false, false, 1, 4);
  21. grid.widthHint = 200;
  22. grid.heightHint = 200;
  23. groupSets.setLayoutData(grid);
  24. setButtonInitialize(new Button(composite, SWT.NONE), "Add All ->");
  25. setButtonInitialize(new Button(composite, SWT.NONE), "<- Remove");
  26. setButtonInitialize(new Button(composite, SWT.NONE), "<- Remove All");
  27. return composite;
  28. }
  29. public void setButtonInitialize(Button btn, String name){
  30. GridData grid = new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1);
  31. grid.widthHint = 100;
  32. grid.heightHint = 25;
  33. btn.setText(name);
  34. btn.setLayoutData(grid);
  35. btn.setEnabled(false);
  36. }

在這邊請注意new GridData部分,在第5、6的參數可以設定當下這個元件跨越的row, column

public GridData(int horizontalAlignment,
        int verticalAlignment,
        boolean grabExcessHorizontalSpace,
        boolean grabExcessVerticalSpace,
        int horizontalSpan,
        int verticalSpan)

以label而言,它只需設horizontal (column)為3, vertical (row) 為1

而左邊及右邊List選項須根據第二欄項目個數來設定vertical = 4, horizonal = 1

但是要注意建置順序,左邊List先建立、再來是中間第一個button、過來是右邊List

接著才是下面三個button。

好比網頁table的建置模式如下:



留言