RCP 中的 SWT & JFACE

SWT

什么是SWT?

SWT全名是Standard Widget Toolkit是一个开源的GUI编程框架,我们每一个java开发者,在学习java开发的时候都会接触到awt以及swing这两个图形库,与awt,swing两个图形库不同,swt的优势体现于底层调用本地的图形库,大大提高了运行速度(损失了一定跨平台性)。SWT的一个很重要的一点,一个控件并不是单独存在的,而是存在于父控件中。这样当父控件disposed后,子控件也一定很disposed了。每一个swt控件的构造函数,都要依托于一个parent容器。

Tabletable = newTable(parent,SWT.MULTI|SWT.H_SCROLL);


JFACE

既然有了SWT,为什么会有JFACE的诞生呢?当然是为了弥不了对视图层,控制层,数据层的隔离,进行了MVC的封装。比如数据来源就是Model.通过

tableViewer.setInput(objs);

数据如何组织(Controller)

tableViewer.setContentProvider(newArrayContentProvider)

数据如何显示(Viewer)

tableViewer.setLabelProvider(..);


table展示数据依赖于索引,jface封装了很多方法,你只需传入一些对象就可玩成对数据的过滤,排序,组织等功能。

下面是一个具体table和tableviewer的demo:

依赖于5个包:

importjava.util.List;importorg.eclipse.jface.viewers.ArrayContentProvider;

importorg.eclipse.jface.viewers.ColumnLabelProvider;

importorg.eclipse.jface.viewers.TableViewer;

importorg.eclipse.jface.viewers.TableViewerColumn;

importorg.eclipse.swt.SWT;importorg.eclipse.swt.layout.GridData;

importorg.eclipse.swt.layout.GridLayout;

importorg.eclipse.swt.widgets.Display;

importorg.eclipse.swt.widgets.Shell;importorg.eclipse.swt.widgets.Table;

importorg.eclipse.swt.widgets.TableColumn;

importorg.eclipse.swt.widgets.TableItem;importcom.google.common.collect.Lists;

class People {

String name;

String age;intindex;publicPeople(intindex, String name, String age) {this.name = name;this.age = age;this.index = index;

}publicStringgetName() {returnname;

}publicStringgetAge() {returnage;

}publicintgetIndex() {returnindex;

}

}publicclassDemo{publicstaticvoidmain(String[] args) {

Display display = Display.getDefault();

Shell shell =newShell(display);

shell.setMaximized(true);

shell.setLayout(newGridLayout(2,false));

Table table =newTable(shell, SWT.MULTI | SWT.FULL_SELECTION

| SWT.CHECK);

table.setToolTipText("SWT table demo");

table.setLayoutData(newGridData(SWT.FILL, SWT.FILL,false,true));

table.setHeaderVisible(true);

table.setLinesVisible(true);

createColumLabel(table);

List objs = createData();for(introw =0; row < objs.size(); row++) {

TableItem item =newTableItem(table, SWT.FILL);// 依赖于具体参数for(intcol =0; col < table.getColumnCount(); col++) {if(objs.get(row) !=null) {switch(col) {case0:

item.setText(col, objs.get(row).getIndex() +"");break;case1:

item.setText(col, objs.get(row).getName());break;case2:

item.setText(col, objs.get(row).getAge());

}

}

}

}

table.pack();

TableViewer tableViewer =newTableViewer(shell, SWT.CHECK

| SWT.FULL_SELECTION);

createColumLabel(tableViewer);

tableViewer.setContentProvider(newArrayContentProvider());

tableViewer.setInput(objs);

shell.open();while(!shell.isDisposed()) {if(!display.readAndDispatch()) {continue;

}

}

}privatestaticvoidcreateColumLabel(Table table) {for(inti =0; i <3; i++) {

TableColumn tc =newTableColumn(table, SWT.CENTER);

tc.setResizable(false);

tc.setWidth(250);

}

}privatestaticListcreateData() {

List peoples = Lists.newArrayList();

peoples.add(newPeople(1,"Li hua","20"));

peoples.add(newPeople(2,"Wang qiang","30"));

peoples.add(newPeople(3,"Zhang wei","40"));returnpeoples;

}privatestaticvoidcreateColumLabel(TableViewer tableViewer) {

TableViewerColumn viewerColum1 =newTableViewerColumn(tableViewer,

SWT.NONE);

viewerColum1.setLabelProvider(newColumnLabelProvider() {@OverridepublicStringgetText(Object element) {if(elementinstanceofPeople) {returnPeople.class.cast(element).getIndex() +"";

}returnsuper.getText(element);

}

});

TableViewerColumn viewerColum2 =newTableViewerColumn(tableViewer,

SWT.NONE);

viewerColum2.setLabelProvider(newColumnLabelProvider() {@OverridepublicStringgetText(Object element) {if(elementinstanceofPeople) {returnPeople.class.cast(element).getName();

}returnsuper.getText(element);

}

});

TableViewerColumn viewerColum3 =newTableViewerColumn(tableViewer,

SWT.NONE);

viewerColum3.setLabelProvider(newColumnLabelProvider() {@OverridepublicStringgetText(Object element) {if(elementinstanceofPeople) {returnPeople.class.cast(element).getAge();

}returnsuper.getText(element);

}

});

TableColumn tableColumn = viewerColum1.getColumn();

tableColumn.setResizable(false);

tableColumn.setWidth(250);

tableColumn = viewerColum2.getColumn();

tableColumn.setResizable(false);

tableColumn.setWidth(250);

tableColumn = viewerColum3.getColumn();

tableColumn.setResizable(false);

tableColumn.setWidth(250);

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容

  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,421评论 2 45
  • GridLayout是一个非常强大的布局管理器,它可以实现很多复杂的布局,名字中暗示它将所有控件放置在类似网格的布...
    YU_XI阅读 1,277评论 3 0
  • Correctness AdapterViewChildren Summary: AdapterViews can...
    MarcusMa阅读 8,860评论 0 6
  • 吾行古道,欲从老子,西出函谷,可否登天路? 吾踏名山,欲寻仙踪,北上昆仑,是否有仙存? 将出东海,访方寸蓬莱,如今...
    masquerading阅读 167评论 0 0
  • 此刻我正在北京去天津的列车上,很快就会到站,闺蜜已做好接车准备!当老公说让我去放放风的时候,我曾有一丝晃动:潘,你...
    潘存英阅读 501评论 4 2