前文回顾:

插件学习篇

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

利用扩展点,开发透视图

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

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

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

    来自:http://www.jianshu.com/p/bcf86b170d9c 前言 为什么会写这个?因为在iOS开发中,界面的布局一直没有Android布局有那么多的方法和优势,我个人开发都是纯代 ...

  2. Qt基本控件及三大布局

    Qt基本控件及三大布局 来源: http://blog.csdn.net/a2604539133/article/details/73920696 Qt基本模块 一.Qt的三大布局 QHBoxLayo ...

  3. c#学习笔记之使用 TableLayoutPanel 控件设置窗体布局

    使用 TableLayoutPanel 控件设置窗体布局 在 Visual Studio IDE 左侧,找到“工具箱”选项卡. 选择“工具箱”选项卡,随即将显示工具箱.(或者,在菜单栏上,依次选择“视 ...

  4. Windows程序控件升级==>>构建布局良好的Windows程序

    01.菜单栏(MenuStrip) 01.看看这就是menuStrip的魅力: 02.除了一些常用的属性(name.text..)外还有: 03.有人会问:上图的快捷键: 方法: 方式一:1.设置菜单 ...

  5. WinForm DataGridView控件、duck布局

    1.DataGridView控件 显示数据表 (1)后台数据绑定: List<xxx> list = new List<xxx>(); dataGridView1.DataSo ...

  6. iOS Masonry控件等比例布局

    一.先解释相关API 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /**  *  distribute with fixed spacing  *  *  ...

  7. struts中的dojo控件sx:submit布局问题

    想在一个四列的表格中插入两个按钮,希望实现下面的布局效果: 其中保存按钮为<sx:submit />控件.按照下面的代码布局: <tr><td align="c ...

  8. DevExpress的图形按钮菜单栏控件WindowsUIButtonPanel的布局、使用和设置按钮的点击事件

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  9. C#用户控件实战01_CSS布局

    很多应用系统的主页布局,一般采用如下案例所示布局较多,如下图的CSS布局框架,上.中.下,接下来我们演示,在C#中实现如下的业务架构布局. 代码范例: 在<body></body&g ...

随机推荐

  1. python学习之-- 装饰器

    高阶函数+嵌套函数 == 装饰器 什么是装饰器: 其实也是一个函数. 功能:为其他的函数添加附加功能 原则:不能修改被装饰的函数的源代码和调用方式 学习装饰器前首先要明白以下3条事项: 1:函数 即 ...

  2. 实现浏览器兼容的innerText

    今天学习到了FF不支持innerText,而IE.chrome.Safari.opera均支持innerText. 为了各个浏览器能兼容innerText,必须对js做一次封装. 为啥能实现兼容呢?原 ...

  3. SQL2008安装时,“provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (.Net SqlClient Data Provider)” 错误的解决方案

    错误提示: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provide ...

  4. Activiti-5.3工作流引擎-源码解析(流程文档解析)

    前面我们通过BPMN20.xsd和Activiti自定义的XML Schema文件初步了解了业务流程模型的定义,那么现在我们来了解一下流程文档的解析过程,这个过程主要是通过代码解析来完成. 代码解析过 ...

  5. CentOS 6.X配置 NFS以及启动和mount挂载

    一.环境介绍: 服务器:centos 192.168.1.225 客户端:centos 192.168.1.226 二.安装: NFS的安装配置:centos 5 : yum -y install n ...

  6. [scrapy]实例:爬取jobbole页面

    工程概览: 创建工程 scrapy startproject ArticleSpider 创建spider cd /ArticleSpider/spiders/ 新建jobbole.py # -*- ...

  7. spring mvc 整理

    spring mvc 整理

  8. Mapreduce运行过程分析(基于Hadoop2.4)——(三)

    4.4 Reduce类 4.4.1 Reduce介绍 整完了Map,接下来就是Reduce了.YarnChild.main()->ReduceTask.run().ReduceTask.run方 ...

  9. hdu 5303 Delicious Apples

    这道题贪心 背包 假设在走半圆之内能够装满,那么一定优于绕一圈回到起点.所以我们从中点将这个分开,那么对于每一个区间由于苹果数非常少,所以能够利用pos[x]数组记录每一个苹果所在的苹果树位置,然后将 ...

  10. url加密并计算时间

    将URL地址参数进行加密传输提高网站安全性 加密算法,直接调用就好 function keyED($txt,$encrypt_key){ $encrypt_key = md5($encrypt_key ...