【插件开发】—— 6 SWT 复杂控件使用以及布局
阅读原文时间:2023年07月16日阅读:1

前文回顾:

插件学习篇

简单的建立插件工程以及模型文件分析

利用扩展点,开发透视图

SWT编程须知

5 SWT简单控件的使用与布局搭配

  前几篇讲到了简单控件的使用,复杂控件使用原则上与简单控件差不多,不过数据的使用还有一些布局还有些额外的技巧。

  成果展示:

    

  这里介绍下Tab页,列表,以及树的使用。

  这个tab页仍然采用SWT控件的一贯作风,子页都以挂载的方式连接到Tab容器上,但是需要使用一个组个对象才能在里面放置内容,并不支持直接进行布局。

     TabFolder tabFolder = new TabFolder(shell,SWT.BORDER);

    TabItem tabItem1 = new TabItem(tabFolder,SWT.NONE);  
    tabItem1.setText("第一页");

    Composite compsoite1 = new Composite(tabFolder,SWT.NONE);  
    tabItem1.setControl(compsoite1);

  这样再在Composite容器内放置其他的控件。

  而列表以及树的使用基本上差不多,树稍微复杂一点,有一个父亲孩子的概念,多使用几次就了解其中的关系技巧了。

       tree = new Tree(treeGroup,SWT.SINGLE);
tree.setLayoutData(new GridData(GridData.FILL_BOTH));

        TreeItem stu1 = new TreeItem(tree,SWT.NONE);  
        stu1.setText("xingoo");  
        {  
            TreeItem info1 = new TreeItem(stu1,SWT.NONE);  
            info1.setText("age:25");

            TreeItem info2 = new TreeItem(stu1,SWT.NONE);  
            info2.setText("tel:12345");  
        }  
        TreeItem stu2 = new TreeItem(tree,SWT.NONE);  
        stu2.setText("halo");  
        {  
            TreeItem info3 = new TreeItem(stu2,SWT.NONE);  
            info3.setText("age:25");

            TreeItem info4 = new TreeItem(stu2,SWT.NONE);  
            info4.setText("tel:67890");  
        }

  比较常用的一般就是列表,一般导向页,对话框也都是使用Table来制作。

       table = new Table(tableGroup,SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION);
table.setHeaderVisible(true);//设置表头可见
table.setLinesVisible(true);//设置线条可见
table.setLayoutData(new GridData(GridData.FILL_BOTH));

        TableColumn column1 = new TableColumn(table,SWT.NULL);  
        column1.setText("Tree Item");  
        column1.pack();  
        column1.setWidth();

        TableColumn column2 = new TableColumn(table,SWT.NULL);  
        column2.setText("Parent");  
        column2.pack();  
        column2.setWidth();

       TableItem item = new TableItem(table,SWT.NONE);
item.setText(new String[]{“”,“”});

  首先应用的是一个Tab容器,在第一页放置了一个树形控件,和一个列表控件。点击树形控件的节点,会在列表中添加相关的内容。

  源码参考如下:

public void todo(Shell shell) {
TabFolder tabFolder = new TabFolder(shell,SWT.BORDER);

     TabItem tabItem1 = new TabItem(tabFolder,SWT.NONE);  
     tabItem1.setText("第一页");

     Composite compsoite1 = new Composite(tabFolder,SWT.NONE);  
     tabItem1.setControl(compsoite1);

     GridLayout layout = new GridLayout();  
     layout.numColumns = ;  
     compsoite1.setLayout(layout);  
     Group treeGroup = new Group(compsoite1,SWT.NONE);  
     treeGroup.setText("Tree");  
     GridData griddata = new GridData(GridData.FILL\_BOTH);  
     griddata.heightHint = ;  
     treeGroup.setLayoutData(griddata);  
     treeGroup.setLayout(new GridLayout(,false));  
     {  
         tree = new Tree(treeGroup,SWT.SINGLE);  
         tree.setLayoutData(new GridData(GridData.FILL\_BOTH));

         TreeItem stu1 = new TreeItem(tree,SWT.NONE);  
         stu1.setText("xingoo");  
         {  
             TreeItem info1 = new TreeItem(stu1,SWT.NONE);  
             info1.setText("age:25");

             TreeItem info2 = new TreeItem(stu1,SWT.NONE);  
             info2.setText("tel:12345");  
         }  
         TreeItem stu2 = new TreeItem(tree,SWT.NONE);  
         stu2.setText("halo");  
         {  
             TreeItem info3 = new TreeItem(stu2,SWT.NONE);  
             info3.setText("age:25");

             TreeItem info4 = new TreeItem(stu2,SWT.NONE);  
             info4.setText("tel:67890");  
         }

         tree.addSelectionListener(new SelectionAdapter() {  
             public void widgetSelected(SelectionEvent evt){  
                 TableItem item = new TableItem(table,SWT.NONE);  
                 item.setText(new String\[\]{tree.getSelection()\[\].toString(),tree.getSelection()\[\].getText()});  
             }  
         });  
     }  
     Group tableGroup = new Group(compsoite1,SWT.NONE);  
     tableGroup.setText("Table");  
     GridData gd = new GridData(GridData.FILL\_BOTH);  
     gd.heightHint = ;  
     tableGroup.setLayoutData(gd);  
     tableGroup.setLayout(new GridLayout(,false));  
     {    //创建一个单选的,有边界的,一行全选的表格  
         table = new Table(tableGroup,SWT.SINGLE | SWT.BORDER | SWT.FULL\_SELECTION);  
         table.setHeaderVisible(true);//设置表头可见  
         table.setLinesVisible(true);//设置线条可见  
         table.setLayoutData(new GridData(GridData.FILL\_BOTH));

         TableColumn column1 = new TableColumn(table,SWT.NULL);  
         column1.setText("Tree Item");  
         column1.pack();  
         column1.setWidth();

         TableColumn column2 = new TableColumn(table,SWT.NULL);  
         column2.setText("Parent");  
         column2.pack();  
         column2.setWidth();  
     }

     TabItem tabItem2 = new TabItem(tabFolder,SWT.NONE);  
     tabItem2.setText("第二页");  
 }

  全部源码

package com.xingoo.plugin.swttest.test;

import javax.swing.text.StyleConstants.ColorConstants;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;

import com.xingoo.plugin.swttest.Abstract.AbstractExample;

public class Test1 extends AbstractExample{
private Table table;
private Tree tree;
public static void main(String[] args) {
new Test1().run();
}

public void todo(Shell shell) {  
    TabFolder tabFolder = new TabFolder(shell,SWT.BORDER);

    TabItem tabItem1 = new TabItem(tabFolder,SWT.NONE);  
    tabItem1.setText("第一页");

    Composite compsoite1 = new Composite(tabFolder,SWT.NONE);  
    tabItem1.setControl(compsoite1);

    GridLayout layout = new GridLayout();  
    layout.numColumns = ;  
    compsoite1.setLayout(layout);  
    Group treeGroup = new Group(compsoite1,SWT.NONE);  
    treeGroup.setText("Tree");  
    GridData griddata = new GridData(GridData.FILL\_BOTH);  
    griddata.heightHint = ;  
    treeGroup.setLayoutData(griddata);  
    treeGroup.setLayout(new GridLayout(,false));  
    {  
        tree = new Tree(treeGroup,SWT.SINGLE);  
        tree.setLayoutData(new GridData(GridData.FILL\_BOTH));

        TreeItem stu1 = new TreeItem(tree,SWT.NONE);  
        stu1.setText("xingoo");  
        {  
            TreeItem info1 = new TreeItem(stu1,SWT.NONE);  
            info1.setText("age:25");

            TreeItem info2 = new TreeItem(stu1,SWT.NONE);  
            info2.setText("tel:12345");  
        }  
        TreeItem stu2 = new TreeItem(tree,SWT.NONE);  
        stu2.setText("halo");  
        {  
            TreeItem info3 = new TreeItem(stu2,SWT.NONE);  
            info3.setText("age:25");

            TreeItem info4 = new TreeItem(stu2,SWT.NONE);  
            info4.setText("tel:67890");  
        }

        tree.addSelectionListener(new SelectionAdapter() {  
            public void widgetSelected(SelectionEvent evt){  
                TableItem item = new TableItem(table,SWT.NONE);  
                item.setText(new String\[\]{tree.getSelection()\[\].toString(),tree.getSelection()\[\].getText()});  
            }  
        });  
    }  
    Group tableGroup = new Group(compsoite1,SWT.NONE);  
    tableGroup.setText("Table");  
    GridData gd = new GridData(GridData.FILL\_BOTH);  
    gd.heightHint = ;  
    tableGroup.setLayoutData(gd);  
    tableGroup.setLayout(new GridLayout(,false));  
    {    //创建一个单选的,有边界的,一行全选的表格  
        table = new Table(tableGroup,SWT.SINGLE | SWT.BORDER | SWT.FULL\_SELECTION);  
        table.setHeaderVisible(true);//设置表头可见  
        table.setLinesVisible(true);//设置线条可见  
        table.setLayoutData(new GridData(GridData.FILL\_BOTH));

        TableColumn column1 = new TableColumn(table,SWT.NULL);  
        column1.setText("Tree Item");  
        column1.pack();  
        column1.setWidth();

        TableColumn column2 = new TableColumn(table,SWT.NULL);  
        column2.setText("Parent");  
        column2.pack();  
        column2.setWidth();  
    }

    TabItem tabItem2 = new TabItem(tabFolder,SWT.NONE);  
    tabItem2.setText("第二页");  
}  

}

  引用的抽象类

package com.xingoo.plugin.swttest.Abstract;

import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public abstract class AbstractExample{
public void run(){
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("shell example");
shell.setBounds(,,,);
shell.setLayout(new FillLayout());
todo(shell);
shell.open();

    while(!shell.isDisposed()){  
        if(!display.readAndDispatch())  
            display.sleep();  
    }  
    //dispose the resource  
    display.beep();  
    display.dispose();  
}  
public abstract void todo(Shell shell);//extension something here  

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章