【插件开发】—— 6 SWT 复杂控件使用以及布局

前文回顾:

插件学习篇

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

利用扩展点,开发透视图

SWT编程须知

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

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

  成果展示:

    

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

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

            TableColumn column2 = new TableColumn(table,SWT.NULL);
            column2.setText("Parent");
            column2.pack();
            column2.setWidth(150);
        TableItem item = new TableItem(table,SWT.NONE);
                    item.setText(new String[]{“123”,“445”});

  那么下面还是看一个搭配使用的例子

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

  源码参考如下:

 1 public void todo(Shell shell) {
 2         TabFolder tabFolder = new TabFolder(shell,SWT.BORDER);
 3
 4         TabItem tabItem1 = new TabItem(tabFolder,SWT.NONE);
 5         tabItem1.setText("第一页");
 6
 7         Composite compsoite1 = new Composite(tabFolder,SWT.NONE);
 8         tabItem1.setControl(compsoite1);
 9
10         GridLayout layout = new GridLayout();
11         layout.numColumns = 1;
12         compsoite1.setLayout(layout);
13         Group treeGroup = new Group(compsoite1,SWT.NONE);
14         treeGroup.setText("Tree");
15         GridData griddata = new GridData(GridData.FILL_BOTH);
16         griddata.heightHint = 50;
17         treeGroup.setLayoutData(griddata);
18         treeGroup.setLayout(new GridLayout(1,false));
19         {
20             tree = new Tree(treeGroup,SWT.SINGLE);
21             tree.setLayoutData(new GridData(GridData.FILL_BOTH));
22
23             TreeItem stu1 = new TreeItem(tree,SWT.NONE);
24             stu1.setText("xingoo");
25             {
26                 TreeItem info1 = new TreeItem(stu1,SWT.NONE);
27                 info1.setText("age:25");
28
29                 TreeItem info2 = new TreeItem(stu1,SWT.NONE);
30                 info2.setText("tel:12345");
31             }
32             TreeItem stu2 = new TreeItem(tree,SWT.NONE);
33             stu2.setText("halo");
34             {
35                 TreeItem info3 = new TreeItem(stu2,SWT.NONE);
36                 info3.setText("age:25");
37
38                 TreeItem info4 = new TreeItem(stu2,SWT.NONE);
39                 info4.setText("tel:67890");
40             }
41
42             tree.addSelectionListener(new SelectionAdapter() {
43                 public void widgetSelected(SelectionEvent evt){
44                     TableItem item = new TableItem(table,SWT.NONE);
45                     item.setText(new String[]{tree.getSelection()[0].toString(),tree.getSelection()[0].getText()});
46                 }
47             });
48         }
49         Group tableGroup = new Group(compsoite1,SWT.NONE);
50         tableGroup.setText("Table");
51         GridData gd = new GridData(GridData.FILL_BOTH);
52         gd.heightHint = 20;
53         tableGroup.setLayoutData(gd);
54         tableGroup.setLayout(new GridLayout(1,false));
55         {    //创建一个单选的,有边界的,一行全选的表格
56             table = new Table(tableGroup,SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION);
57             table.setHeaderVisible(true);//设置表头可见
58             table.setLinesVisible(true);//设置线条可见
59             table.setLayoutData(new GridData(GridData.FILL_BOTH));
60
61             TableColumn column1 = new TableColumn(table,SWT.NULL);
62             column1.setText("Tree Item");
63             column1.pack();
64             column1.setWidth(150);
65
66             TableColumn column2 = new TableColumn(table,SWT.NULL);
67             column2.setText("Parent");
68             column2.pack();
69             column2.setWidth(150);
70         }
71
72
73         TabItem tabItem2 = new TabItem(tabFolder,SWT.NONE);
74         tabItem2.setText("第二页");
75     }

  全部源码

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 = 1;
        compsoite1.setLayout(layout);
        Group treeGroup = new Group(compsoite1,SWT.NONE);
        treeGroup.setText("Tree");
        GridData griddata = new GridData(GridData.FILL_BOTH);
        griddata.heightHint = 50;
        treeGroup.setLayoutData(griddata);
        treeGroup.setLayout(new GridLayout(1,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()[0].toString(),tree.getSelection()[0].getText()});
                }
            });
        }
        Group tableGroup = new Group(compsoite1,SWT.NONE);
        tableGroup.setText("Table");
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.heightHint = 20;
        tableGroup.setLayoutData(gd);
        tableGroup.setLayout(new GridLayout(1,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(150);

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

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

时间: 2024-10-10 08:00:01

【插件开发】—— 6 SWT 复杂控件使用以及布局的相关文章

WinForms界面控件初探:布局灵活、让你灵感一现的Tile Control

超乎你想象!WinForms Grid Control处理100万行数据到底有多快? WinForms界面控件初探:处理速度飞快的WinForms Data Grid(1) WinForms界面控件初探:处理速度飞快的WinForms Data Grid(2) WinForms界面控件初探:支持读写XLSx, XLS, CSV 和 TXT文件的Spreadsheet Control WinForms界面控件初探:强大的嵌入式多功能Data Editors WinForms界面控件初探:功能强大且

New UI-Java代码动态添加控件或xml布局

New UI-Java代码动态添加控件或xml布局  --转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途! 小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的 力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文 更加的详尽,帮到更多的人,O(∩_∩)O谢谢! 小猪Android开发交流群:小猪Android开发交流群群号:421858269 新Android UI实例大全目录:http://blog.

Qt Creator 窗体控件自适应窗口大小布局(转)

常见的软件窗口大小改变(最大化.手动改变时)需要窗口的部件能够自适应布局,而在Qt的应用程序界面设计中,对于像我一样的初学者如何实现窗口自适应调整还是要绕点弯路的.网上百度了很多,多数说的很含糊,还有很多是用程序实现的,既然已经有Qt Creator那么高集成度的工具了,我还是倾向于直接在Qt Creator中通过可视化配置的方式完成,一是所见即所得,而是效率要高不少. Qt中如果想实现窗体内空间随着窗体大小调整,必须使用布局管理,常用的布局管理有QHBoxLayout.QVBoxLayout.

silverlight 控件初始化和布局

https://msdn.microsoft.com/zh-cn/library/dd351483(v=vs.95).aspx 控件初始化和布局 Silverlight 当您创建控件时,务必了解初始化和布局事件和方法的顺序. 这样,您就知道用于改写的正确方法或要处理的正确事件以获得特定的效果. 通常,可以构造 Silverlight 控件并设置其属性:接着创建其可视化表示形式或可视化树:然后该控件经历整个布局过程. 下表列出了在控件创建和布局期间所设置的属性以及发生的事件和方法. 属性.方法和事

iOS 开发 ZFUI framework控件,使布局更简单

来自:http://www.jianshu.com/p/bcf86b170d9c 前言 为什么会写这个?因为在iOS开发中,界面的布局一直没有Android布局有那么多的方法和优势,我个人开发都是纯代码,Masonry这个框架我在开发中也是不用的,一个是代码布局的时候,代码量比较多,另外好像在iOS10 布局有问题,网上也有些解决的方法了. 所以就想能自定义一些UI控件,使布局更加简单 实现思路 可以像Android的wrap_content一样,是UILabel 可以根据内容来展示控件的宽高

Qt基本控件及三大布局

Qt基本控件及三大布局 来源: http://blog.csdn.net/a2604539133/article/details/73920696 Qt基本模块 一.Qt的三大布局 QHBoxLayout: 水平显示布局,所有在其上面摆放的控件只能水平排列下去: QVBoxLayout:  垂直显示布局,所有在其上面摆放的控件只能垂直排列下去: QGridLayout  格子显示布局,可以按照表格的形式显示布局: 二.Qt的控件 label:标签,可以显示文本信息,只读: pushbutton

使用 TableLayoutPanel 控件设置窗体布局

使用 TableLayoutPanel 控件设置窗体布局 在 Visual Studio IDE 左侧,找到"工具箱"选项卡. 选择"工具箱"选项卡,随即将显示工具箱.(或者,在菜单栏上,依次选择"视图"."工具箱".) 选择"容器"组旁边的小三角形符号以打开该组,如下图所示. "容器"组 可以向窗体中添加类似按钮.复选框和标签这样的控件. 在工具箱中双击 TableLayoutPane

WPF Grid布局 实现DataGrid控件宽充满布局

1.充满布局 显示设置DataGridTextColumn的属性Width="*" 实现DataGrid控件宽充满布局,代码与效果图片如下所示: 2.Header居中显示 WPF DataGrid属性中无DataGrid的Header居中显示属性,可在xaml代码中添加 设置风格代码 设置,代码如下: <!-- 设置Header居中 --> <DataGrid.ColumnHeaderStyle> <Style TargetType="DataG

Windows程序控件升级==&gt;&gt;构建布局良好的Windows程序

01.菜单栏(MenuStrip) 01.看看这就是menuStrip的魅力: 02.除了一些常用的属性(name.text..)外还有: 03.有人会问:上图的快捷键: 方法: 方式一:1.设置菜单项的Text属性为(打开(&F)), 首先必须按住alt+主菜单快捷键进入到对应的主菜单, 然后直接按F就可以打开子窗体. 方式二:通过菜单项的ShorCartKeys属性设置. 创建对应的组合键,可以在主界面直接按对应的 字母键就可以打开子窗体 04.哎,教你们 分割线的画法(很简单的!) 方法一