SWT入门-常用组件的使用(转)

时间:2022-09-22 16:24:59

转自:http://www.cnblogs.com/kentyshang/archive/2007/08/16/858367.html

swt的常用组件button ,text ,combo,list ,还有一些容器类composite ,group,这里选择几个,列写简单的用法
不写解释了,因为代码很简单,而且代码上的注释足以说明.
1,combo  和text

SWT入门-常用组件的使用(转)
package com.test;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text; public class CTShow { private static List list;
private static Combo combo;
private static Text text;
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(478, 120);
shell.setText("combo and text");
shell.open();
//构造text
text = new Text(shell, SWT.BORDER);
text.setBounds(160, 34, 281, 20);
//构造combo
combo = new Combo(shell, SWT.NONE);
combo.setItems(new String[] {"one", "two", "three", "four"});
combo.setData("one", "1");
combo.setData("two", "2");
combo.setData("three", "3");
combo.setData("four", "4");
combo.setBounds(28, 34, 102, 20);
//添加监听器
combo.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
String selText = combo.getText();
String selValue = (String)combo.getData(selText);
text.setText("text: " + selText + " value: " + selValue);
}}); shell.layout();
//消息循环
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} }

效果如图:

SWT入门-常用组件的使用(转)

SWT入门-常用组件的使用(转)

2,list、 button 、messagebox

package com.test;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell; public class LBMShow { private static List list;
/**
* Launch the application
* @param args
*/
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(192, 217);
shell.setText("list and button and messagebox");
// shell.open();
//构造list
list = new List(shell, SWT.BORDER|SWT.MULTI|SWT.V_SCROLL);
list.setItems(new String[] {"语文", "数学", "英语", "物理", "化学"});
list.setData("化学", "HX");
list.setData("物理", "WL");
list.setData("语文", "YW");
list.setData("数学", "SX");
list.setData("英语", "YY");
list.setBounds(29, 25, 100, 75);
//构造button
final Button button = new Button(shell, SWT.NONE);
button.setText("提示");
button.setBounds(48, 121, 58, 22);
//添加监听器
button.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
for (String str : list.getSelection()) {
//messagebox提示
MessageDialog.openInformation(null, null, str);
}
}
}); shell.layout();
//消息循环
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} }

效果:

SWT入门-常用组件的使用(转)

SWT入门-常用组件的使用(转)

3,group组

SWT入门-常用组件的使用(转)
package com.test;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text; public class GroupShow {
private static Text text;
public static void main(String[] args) {
final Display display = Display.getDefault();
Shell shell = new Shell();
shell.setText("group");
shell.open();
//构造group
final Group group = new Group(shell, SWT.NONE);
group.setText(" 组 ");
group.setBounds(41, 28, 143, 100);
//把按钮放在group中,注意new Button(group这里
final Button button = new Button(group, SWT.NONE);
button.setText("按钮");
button.setBounds(42, 59, 48, 22);
//构造text
text = new Text(group, SWT.BORDER);
text.setBounds(32, 28, 80, 25);
//
shell.layout();
while(!shell.isDisposed()){
if (!display.readAndDispatch()){
display.sleep();
}
}
}
}

效果;

SWT入门-常用组件的使用(转)

====================================================

Swt/Jface tableViewer入门教程一(显示tableViewer)

1,简单显示,表格的式样见注释中的内容

SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.TableViewer;
SWT入门-常用组件的使用(转)import org.eclipse.swt.SWT;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Display;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Shell;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Table;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.TableColumn;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)public class TestTableViewer {
SWT入门-常用组件的使用(转)    private static Table table;
SWT入门-常用组件的使用(转)    /**
SWT入门-常用组件的使用(转)     * Launch the application
SWT入门-常用组件的使用(转)     * @param args
SWT入门-常用组件的使用(转)     */
SWT入门-常用组件的使用(转)    public static void main(String[] args) {
SWT入门-常用组件的使用(转)        final Display display = Display.getDefault();
SWT入门-常用组件的使用(转)        final Shell shell = new Shell();
SWT入门-常用组件的使用(转)        shell.setSize(500, 375);
SWT入门-常用组件的使用(转)        shell.setText("SWT Application");
SWT入门-常用组件的使用(转)        //注意这里,SWT.NULTI代表可以选择多行,SWT.FULL_SELECTION代表可以整行选择,SWT.BORDER边框,SWT.V_SCROLL ,SWT.H_SCROLL滚动条
SWT入门-常用组件的使用(转)        final TableViewer tableViewer = new TableViewer(shell, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER|SWT.V_SCROLL|SWT.H_SCROLL);
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        table = tableViewer.getTable();
SWT入门-常用组件的使用(转)        table.setLinesVisible(true);
SWT入门-常用组件的使用(转)        table.setHeaderVisible(true);
SWT入门-常用组件的使用(转)        table.setBounds(97, 79, 373, 154);
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)        final TableColumn newColumnTableColumn = new TableColumn(table, SWT.NONE);
SWT入门-常用组件的使用(转)        newColumnTableColumn.setWidth(39);
SWT入门-常用组件的使用(转)        newColumnTableColumn.setText("ID");
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)        final TableColumn newColumnTableColumn_1 = new TableColumn(table, SWT.NONE);
SWT入门-常用组件的使用(转)        newColumnTableColumn_1.setWidth(85);
SWT入门-常用组件的使用(转)        newColumnTableColumn_1.setText("姓名");
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        final TableColumn newColumnTableColumn_2 = new TableColumn(table, SWT.NONE);
SWT入门-常用组件的使用(转)        newColumnTableColumn_2.setWidth(41);
SWT入门-常用组件的使用(转)        newColumnTableColumn_2.setText("性别");
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)        final TableColumn newColumnTableColumn_3 = new TableColumn(table, SWT.NONE);
SWT入门-常用组件的使用(转)        newColumnTableColumn_3.setWidth(43);
SWT入门-常用组件的使用(转)        newColumnTableColumn_3.setText("年龄");
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)        final TableColumn newColumnTableColumn_4 = new TableColumn(table, SWT.NONE);
SWT入门-常用组件的使用(转)        newColumnTableColumn_4.setWidth(126);
SWT入门-常用组件的使用(转)        newColumnTableColumn_4.setText("创建日期");
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        shell.open();
SWT入门-常用组件的使用(转)        while (!shell.isDisposed()) {
SWT入门-常用组件的使用(转)            if (!display.readAndDispatch())
SWT入门-常用组件的使用(转)                display.sleep();
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)}

2,加入布局
显示的效果不好,我们要加入布局,让view填充整个画面在shell.open()后加上
ok,效果达到
3,为TableViewer加上数据,光突突的样子不好看。这里是demo所以不再从数据库里边取数据了。自己构造一个List用来做数据。实际使用中也是这么使用,不过不同的是这里是随意构造的list,而显示实际使用中是从数据库取出数据构造list.
(1)构造一个people类,同时给People类提供一个构造假数据的方法getPeople()

SWT入门-常用组件的使用(转)import java.util.ArrayList;
SWT入门-常用组件的使用(转)import java.util.Date;
SWT入门-常用组件的使用(转)import java.util.List;
SWT入门-常用组件的使用(转)public class People{
SWT入门-常用组件的使用(转)    private Long id;
SWT入门-常用组件的使用(转)    private String name;
SWT入门-常用组件的使用(转)    private String sex;
SWT入门-常用组件的使用(转)    private Integer age;
SWT入门-常用组件的使用(转)    private Date createDate;
SWT入门-常用组件的使用(转)    public People(Long id,String name,String sex,Integer age,Date createDate){
SWT入门-常用组件的使用(转)        this.id = id;
SWT入门-常用组件的使用(转)        this.name = name;
SWT入门-常用组件的使用(转)        this.sex = sex;
SWT入门-常用组件的使用(转)        this.age = age;
SWT入门-常用组件的使用(转)        this.createDate = createDate;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public Integer getAge() {
SWT入门-常用组件的使用(转)        return age;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public void setAge(Integer age) {
SWT入门-常用组件的使用(转)        this.age = age;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public Date getCreateDate() {
SWT入门-常用组件的使用(转)        return createDate;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public void setCreateDate(Date createDate) {
SWT入门-常用组件的使用(转)        this.createDate = createDate;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public Long getId() {
SWT入门-常用组件的使用(转)        return id;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public void setId(Long id) {
SWT入门-常用组件的使用(转)        this.id = id;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public String getName() {
SWT入门-常用组件的使用(转)        return name;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public void setName(String name) {
SWT入门-常用组件的使用(转)        this.name = name;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public String getSex() {
SWT入门-常用组件的使用(转)        return sex;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public void setSex(String sex) {
SWT入门-常用组件的使用(转)        this.sex = sex;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public static List getPeople(){
SWT入门-常用组件的使用(转)        List list = new ArrayList();
SWT入门-常用组件的使用(转)        int n = 30;
SWT入门-常用组件的使用(转)        for(int i=1;i<n;i++){
SWT入门-常用组件的使用(转)            Long id = new Long(i);
SWT入门-常用组件的使用(转)            String name = "张"+i;
SWT入门-常用组件的使用(转)            String sex = "男";
SWT入门-常用组件的使用(转)            if((i%2) == 0){
SWT入门-常用组件的使用(转)                sex = "女";
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)            Integer age;
SWT入门-常用组件的使用(转)            if(i<10){
SWT入门-常用组件的使用(转)                age = new Integer(i*10);
SWT入门-常用组件的使用(转)            }else if(i>10 && i<100){
SWT入门-常用组件的使用(转)                age = new Integer(i);
SWT入门-常用组件的使用(转)            }else if(i>100 && i<1000){
SWT入门-常用组件的使用(转)                age = new Integer(i/10);
SWT入门-常用组件的使用(转)            }else{
SWT入门-常用组件的使用(转)                age = new Integer(22);
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)            Date createDate = new Date();
SWT入门-常用组件的使用(转)            People people = new People(id,name,sex,age,createDate);
SWT入门-常用组件的使用(转)            list.add(people);
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        return list;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)}

(2)给tableViewer提供内容器(IStructuredContentPorvider)和标签器(ITableLabelProvider)
如果想一个tableviewer显示数据,那必须给它提供内容器和标签器,内容器的作用是从List(也可以是其他的集合类)中提取出一个对象(例如People对应着表格的一行,数据库的一条记录),标签器的作用是从一个对象中提取出一个字段(例如年龄,对应着表格中的一个单元格,数据库中某一列的一个值)下边是内容器和标签器的代码:
内容器:

SWT入门-常用组件的使用(转)import java.util.List;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.IStructuredContentProvider;
SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.Viewer;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)public class ContentProvider implements IStructuredContentProvider {
SWT入门-常用组件的使用(转)        public Object[] getElements(Object inputElement) {
SWT入门-常用组件的使用(转)            if(inputElement instanceof List){
SWT入门-常用组件的使用(转)                return ((List)inputElement).toArray();
SWT入门-常用组件的使用(转)            }else{
SWT入门-常用组件的使用(转)                return new Object[0];
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        public void dispose() {
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)    }

标签器:

SWT入门-常用组件的使用(转)import java.text.SimpleDateFormat;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.ITableLabelProvider;
SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.LabelProvider;
SWT入门-常用组件的使用(转)import org.eclipse.swt.graphics.Image;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)public class TableLabelProvider extends LabelProvider implements ITableLabelProvider {
SWT入门-常用组件的使用(转)        public String getColumnText(Object element, int columnIndex) {
SWT入门-常用组件的使用(转)            if (element instanceof People){
SWT入门-常用组件的使用(转)                People p = (People)element;
SWT入门-常用组件的使用(转)                if(columnIndex == 0){
SWT入门-常用组件的使用(转)                    return p.getId().toString();
SWT入门-常用组件的使用(转)                }else if(columnIndex == 1){
SWT入门-常用组件的使用(转)                    return p.getName();
SWT入门-常用组件的使用(转)                }else if (columnIndex ==2){
SWT入门-常用组件的使用(转)                    return p.getSex();
SWT入门-常用组件的使用(转)                }else if (columnIndex == 3){
SWT入门-常用组件的使用(转)                    return p.getAge().toString();
SWT入门-常用组件的使用(转)                }else if (columnIndex == 4){
SWT入门-常用组件的使用(转)                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SWT入门-常用组件的使用(转)                    return sdf.format(p.getCreateDate());
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)            return null;
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        public Image getColumnImage(Object element, int columnIndex) {
SWT入门-常用组件的使用(转)            return null;
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)    }

注意这里:extends LabelProvider,为什么要加这个呢? 因为如果不加这个,因为实现 ITableLabelProvider 的缘故我们还要写四个空函数,而我们本身不需要在这四个空函数中实现什么,所以让它继承自LabelProvider,就可以避免四个空函数。
(3)把标签器和内容器给tableviewer
在shell.open()前边加上这几行

SWT入门-常用组件的使用(转)//设置内容器
SWT入门-常用组件的使用(转)tableViewer.setContentProvider(new ContentProvider());
SWT入门-常用组件的使用(转)//设置标签器
SWT入门-常用组件的使用(转)tableViewer.setLabelProvider(new TableLabelProvider());
SWT入门-常用组件的使用(转)//把数据集合给tableView
SWT入门-常用组件的使用(转)tableViewer.setInput(People.getPeople());
SWT入门-常用组件的使用(转)//这样利用内容器和标签器就能从setInput得到的数据集合分解出显示表格需要的数据。这是一个典型的mvc的实现.

4,样式改变
如果想在每一列前加入一个checkbox
只需要在开始的式样中加入SWT.CHECK

好了到此一个简单的样子选择出来了,但这仅仅是开始,下边将继续介绍按列排序、过滤器、行的颜色设置、在表格上直接编辑等功能
SourceCode
=============================================

Swt/Jface tableViewer入门教程二(让TableViewer按照列排序)

有一个功能是我们常使用的,就是在列的头上点击一下,整个表的记录按照这个列来排序,再点击一下按照这个列的反序来排序。那JFace是如何实现这个功能的呢?
在JFace中是通过一个排序器来实现的,就是ViewerSorter下边写出详细的步骤
一、定义一个sorter继承自ViewerSorter

SWT入门-常用组件的使用(转)import java.util.Date;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.Viewer;
SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.ViewerSorter;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)public class Sorter extends ViewerSorter {
SWT入门-常用组件的使用(转)        private static final int ID = 1;
SWT入门-常用组件的使用(转)        private static final int NAME = 2;
SWT入门-常用组件的使用(转)        private static final int SEX = 3;
SWT入门-常用组件的使用(转)        private static final int AGE = 4;
SWT入门-常用组件的使用(转)        private static final int CREATE_DATE = 5;
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        public static final Sorter ID_ASC = new Sorter(ID);
SWT入门-常用组件的使用(转)        public static final Sorter ID_DESC = new Sorter(-ID);
SWT入门-常用组件的使用(转)        public static final Sorter NAME_ASC = new Sorter(NAME);
SWT入门-常用组件的使用(转)        public static final Sorter NAME_DESC = new Sorter(-NAME);
SWT入门-常用组件的使用(转)        public static final Sorter SEX_ASC = new Sorter(SEX);
SWT入门-常用组件的使用(转)        public static final Sorter SEX_DESC = new Sorter(-SEX);
SWT入门-常用组件的使用(转)        public static final Sorter AGE_ASC = new Sorter(AGE);
SWT入门-常用组件的使用(转)        public static final Sorter AGE_DESC = new Sorter(-AGE);
SWT入门-常用组件的使用(转)        public static final Sorter CREATE_DATE_ASC = new Sorter(CREATE_DATE);
SWT入门-常用组件的使用(转)        public static final Sorter CREATE_DATE_DESC = new Sorter(-CREATE_DATE);
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        private int sortType ;
SWT入门-常用组件的使用(转)        private Sorter(int sortType){
SWT入门-常用组件的使用(转)            this.sortType = sortType;
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        public int compare(Viewer viewer, Object e1, Object e2) {
SWT入门-常用组件的使用(转)            People p1 = (People)e1;
SWT入门-常用组件的使用(转)            People p2 = (People)e2;
SWT入门-常用组件的使用(转)            switch(sortType){
SWT入门-常用组件的使用(转)                case ID:{
SWT入门-常用组件的使用(转)                    Long l1 = p1.getId();
SWT入门-常用组件的使用(转)                    Long l2 = p2.getId();
SWT入门-常用组件的使用(转)                    return l1.compareTo(l2);
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)                case -ID:{
SWT入门-常用组件的使用(转)                    Long l1 = p1.getId();
SWT入门-常用组件的使用(转)                    Long l2 = p2.getId();
SWT入门-常用组件的使用(转)                    return l2.compareTo(l1);
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)                case NAME:{
SWT入门-常用组件的使用(转)                    String s1 = p1.getName();
SWT入门-常用组件的使用(转)                    String s2 = p2.getName();
SWT入门-常用组件的使用(转)                    return s1.compareTo(s2);
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)                case -NAME:{
SWT入门-常用组件的使用(转)                    String s1 = p1.getName();
SWT入门-常用组件的使用(转)                    String s2 = p2.getName();
SWT入门-常用组件的使用(转)                    return s2.compareTo(s1);
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)                case SEX:{
SWT入门-常用组件的使用(转)                    String s1 = p1.getSex();
SWT入门-常用组件的使用(转)                    String s2 = p2.getSex();
SWT入门-常用组件的使用(转)                    return s1.compareTo(s2);
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)                case -SEX:{
SWT入门-常用组件的使用(转)                    String s1 = p1.getSex();
SWT入门-常用组件的使用(转)                    String s2 = p2.getSex();
SWT入门-常用组件的使用(转)                    return s2.compareTo(s1);
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)                case AGE:{
SWT入门-常用组件的使用(转)                    Integer i1 = p1.getAge();
SWT入门-常用组件的使用(转)                    Integer i2 = p2.getAge();
SWT入门-常用组件的使用(转)                    return i1.compareTo(i2);
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)                case -AGE:{
SWT入门-常用组件的使用(转)                    Integer i1 = p1.getAge();
SWT入门-常用组件的使用(转)                    Integer i2 = p2.getAge();
SWT入门-常用组件的使用(转)                    return i2.compareTo(i1);
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)                case CREATE_DATE:{
SWT入门-常用组件的使用(转)                    Date d1 = p1.getCreateDate();
SWT入门-常用组件的使用(转)                    Date d2 = p2.getCreateDate();
SWT入门-常用组件的使用(转)                    d1.compareTo(d2);
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)                case -CREATE_DATE:{
SWT入门-常用组件的使用(转)                    Date d1 = p1.getCreateDate();
SWT入门-常用组件的使用(转)                    Date d2 = p2.getCreateDate();
SWT入门-常用组件的使用(转)                    d2.compareTo(d1);
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)            return 0;
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)    }

二、在TableViewer上,为每一列加入事件监听器类似这样的结构

SWT入门-常用组件的使用(转)    newColumnTableColumn.addSelectionListener(new SelectionAdapter(){
SWT入门-常用组件的使用(转)            boolean asc = true;
SWT入门-常用组件的使用(转)            public void widgetSelected(SelectionEvent e){
SWT入门-常用组件的使用(转)                tableViewer.setSorter(asc?Sorter.ID_ASC:Sorter.ID_DESC);
SWT入门-常用组件的使用(转)                asc = !asc;
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)        });

都加入后TestTableViewer的结果:

SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.TableViewer;
SWT入门-常用组件的使用(转)import org.eclipse.swt.SWT;
SWT入门-常用组件的使用(转)import org.eclipse.swt.events.SelectionAdapter;
SWT入门-常用组件的使用(转)import org.eclipse.swt.events.SelectionEvent;
SWT入门-常用组件的使用(转)import org.eclipse.swt.layout.FillLayout;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Display;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Shell;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Table;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.TableColumn;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)public class TestTableViewer {
SWT入门-常用组件的使用(转)    private static Table table;
SWT入门-常用组件的使用(转)    /**
SWT入门-常用组件的使用(转)     * Launch the application
SWT入门-常用组件的使用(转)     * @param args
SWT入门-常用组件的使用(转)     */
SWT入门-常用组件的使用(转)    public static void main(String[] args) {
SWT入门-常用组件的使用(转)        final Display display = Display.getDefault();
SWT入门-常用组件的使用(转)        final Shell shell = new Shell();
SWT入门-常用组件的使用(转)        shell.setSize(500, 375);
SWT入门-常用组件的使用(转)        shell.setText("SWT Application");
SWT入门-常用组件的使用(转)        //
SWT入门-常用组件的使用(转)        final TableViewer tableViewer = new TableViewer(shell, SWT.CHECK|SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER|SWT.V_SCROLL|SWT.H_SCROLL);
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        table = tableViewer.getTable();
SWT入门-常用组件的使用(转)        table.setLinesVisible(true);
SWT入门-常用组件的使用(转)        table.setHeaderVisible(true);
SWT入门-常用组件的使用(转)        table.setBounds(97, 79, 373, 154);
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)        final TableColumn newColumnTableColumn = new TableColumn(table, SWT.NONE);
SWT入门-常用组件的使用(转)        newColumnTableColumn.setWidth(39);
SWT入门-常用组件的使用(转)        newColumnTableColumn.setText("ID");
SWT入门-常用组件的使用(转)        //加入事件监听器
SWT入门-常用组件的使用(转)        newColumnTableColumn.addSelectionListener(new SelectionAdapter(){
SWT入门-常用组件的使用(转)            boolean asc = true;
SWT入门-常用组件的使用(转)            public void widgetSelected(SelectionEvent e){
SWT入门-常用组件的使用(转)                tableViewer.setSorter(asc?Sorter.ID_ASC:Sorter.ID_DESC);
SWT入门-常用组件的使用(转)                asc = !asc;
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)        });
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)        final TableColumn newColumnTableColumn_1 = new TableColumn(table, SWT.NONE);
SWT入门-常用组件的使用(转)        newColumnTableColumn_1.setWidth(85);
SWT入门-常用组件的使用(转)        newColumnTableColumn_1.setText("姓名");
SWT入门-常用组件的使用(转)//        加入事件监听器
SWT入门-常用组件的使用(转)        newColumnTableColumn_1.addSelectionListener(new SelectionAdapter(){
SWT入门-常用组件的使用(转)            boolean asc = true;
SWT入门-常用组件的使用(转)            public void widgetSelected(SelectionEvent e){
SWT入门-常用组件的使用(转)                tableViewer.setSorter(asc?Sorter.NAME_ASC:Sorter.NAME_DESC);
SWT入门-常用组件的使用(转)                asc = !asc;
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)        });
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        final TableColumn newColumnTableColumn_2 = new TableColumn(table, SWT.NONE);
SWT入门-常用组件的使用(转)        newColumnTableColumn_2.setWidth(41);
SWT入门-常用组件的使用(转)        newColumnTableColumn_2.setText("性别");
SWT入门-常用组件的使用(转)//        加入事件监听器
SWT入门-常用组件的使用(转)        newColumnTableColumn_2.addSelectionListener(new SelectionAdapter(){
SWT入门-常用组件的使用(转)            boolean asc = true;
SWT入门-常用组件的使用(转)            public void widgetSelected(SelectionEvent e){
SWT入门-常用组件的使用(转)                tableViewer.setSorter(asc?Sorter.SEX_ASC:Sorter.SEX_DESC);
SWT入门-常用组件的使用(转)                asc = !asc;
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)        });
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        final TableColumn newColumnTableColumn_3 = new TableColumn(table, SWT.NONE);
SWT入门-常用组件的使用(转)        newColumnTableColumn_3.setWidth(43);
SWT入门-常用组件的使用(转)        newColumnTableColumn_3.setText("年龄");
SWT入门-常用组件的使用(转)//        加入事件监听器
SWT入门-常用组件的使用(转)        newColumnTableColumn_3.addSelectionListener(new SelectionAdapter(){
SWT入门-常用组件的使用(转)            boolean asc = true;
SWT入门-常用组件的使用(转)            public void widgetSelected(SelectionEvent e){
SWT入门-常用组件的使用(转)                tableViewer.setSorter(asc?Sorter.AGE_ASC:Sorter.AGE_DESC);
SWT入门-常用组件的使用(转)                asc = !asc;
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)        });
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        final TableColumn newColumnTableColumn_4 = new TableColumn(table, SWT.NONE);
SWT入门-常用组件的使用(转)        newColumnTableColumn_4.setWidth(126);
SWT入门-常用组件的使用(转)        newColumnTableColumn_4.setText("创建日期");
SWT入门-常用组件的使用(转)//        加入事件监听器
SWT入门-常用组件的使用(转)        newColumnTableColumn_4.addSelectionListener(new SelectionAdapter(){
SWT入门-常用组件的使用(转)            boolean asc = true;
SWT入门-常用组件的使用(转)            public void widgetSelected(SelectionEvent e){
SWT入门-常用组件的使用(转)                tableViewer.setSorter(asc?Sorter.CREATE_DATE_ASC:Sorter.CREATE_DATE_DESC);
SWT入门-常用组件的使用(转)                asc = !asc;
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)        });
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        tableViewer.setContentProvider(new ContentProvider());
SWT入门-常用组件的使用(转)        tableViewer.setLabelProvider(new TableLabelProvider());
SWT入门-常用组件的使用(转)        tableViewer.setInput(People.getPeople());
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        shell.open();
SWT入门-常用组件的使用(转)        shell.setLayout(new FillLayout());
SWT入门-常用组件的使用(转)        shell.layout();
SWT入门-常用组件的使用(转)        while (!shell.isDisposed()) {
SWT入门-常用组件的使用(转)            if (!display.readAndDispatch())
SWT入门-常用组件的使用(转)                display.sleep();
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)}

试一下结果是不是出来了?
好了,最后解释几点:
1,sorter中利用了jdk的compareTo来实现比较,当然你也可以根据自己的需求来实现。
2,  sorter中利用了"-"符号来得到正负数字,用来表现升序、降序。
SourceCode
======================================================

Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)

前边实现了一个表格的基本功能,但这并不够好,能否为表格实现一些更好的功能呢?答案是肯定的。下边我们来加入直接编辑的功能。
一、要实现这个功能必须提供一个实现ICellModifier的类。内容如下

SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.ICellModifier;
SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.TableViewer;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.TableItem;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)public class MyCellModifier implements ICellModifier{
SWT入门-常用组件的使用(转)        private TableViewer tv;
SWT入门-常用组件的使用(转)        public static String[] NAMES ={"张三","李四","小红","翠花"};
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        public MyCellModifier(TableViewer tv){
SWT入门-常用组件的使用(转)                this.tv = tv;
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        public boolean canModify(Object element, String property) {
SWT入门-常用组件的使用(转)            return true;
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)        public Object getValue(Object element, String property) {
SWT入门-常用组件的使用(转)            People p = (People)element;
SWT入门-常用组件的使用(转)            if(property.equals("name")){
SWT入门-常用组件的使用(转)                return new Integer(getNameIndex(p.getName()));
SWT入门-常用组件的使用(转)            }else if(property.equals("sex")){
SWT入门-常用组件的使用(转)                return new Boolean(p.getSex().equals("男"));
SWT入门-常用组件的使用(转)            }else if(property.equals("age")){
SWT入门-常用组件的使用(转)                return String.valueOf(p.getAge());
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)            throw new RuntimeException("error column name : " + property);
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        private int getNameIndex(String name){
SWT入门-常用组件的使用(转)            for(int i=0;i<NAMES.length;i++){
SWT入门-常用组件的使用(转)                if(NAMES[i].equals(name)){
SWT入门-常用组件的使用(转)                    return i;
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)            return -1;
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)        public void modify(Object element, String property, Object value) {
SWT入门-常用组件的使用(转)            TableItem item = (TableItem)element;
SWT入门-常用组件的使用(转)            People p = (People)item.getData();
SWT入门-常用组件的使用(转)            if (property.equals("name")){
SWT入门-常用组件的使用(转)                Integer comboIndex = (Integer)value;
SWT入门-常用组件的使用(转)                if(comboIndex.intValue() == -1){
SWT入门-常用组件的使用(转)                    return ;
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)                String newName = NAMES[comboIndex.intValue()];
SWT入门-常用组件的使用(转)                p.setName(newName);
SWT入门-常用组件的使用(转)            }else if(property.equals("sex")){
SWT入门-常用组件的使用(转)                Boolean newValue = (Boolean)value;
SWT入门-常用组件的使用(转)                System.out.println(newValue);
SWT入门-常用组件的使用(转)                if(newValue.booleanValue()){
SWT入门-常用组件的使用(转)                    p.setSex("男");
SWT入门-常用组件的使用(转)                }else{
SWT入门-常用组件的使用(转)                    p.setSex("女");
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)            }else if (property.equals("age")){
SWT入门-常用组件的使用(转)                String newValue = (String)value;
SWT入门-常用组件的使用(转)                if(newValue.equals("")){
SWT入门-常用组件的使用(转)                    return ;
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)                Integer newAge = new Integer(newValue);
SWT入门-常用组件的使用(转)                p.setAge(newAge);
SWT入门-常用组件的使用(转)            }else{
SWT入门-常用组件的使用(转)                throw new RuntimeException("错误列名:" + property);
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)            tv.update(p, null);
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)    }

二、好了,有了这个类,下一部就是如何把它和TestTableViewer关联起来,在TestTableViewer中setInput()后加入如下内容

SWT入门-常用组件的使用(转)tableViewer.setColumnProperties(new String[]{"id","name","sex","age","createDate"});
SWT入门-常用组件的使用(转)        CellEditor[] cellEditor = new CellEditor[5];
SWT入门-常用组件的使用(转)        cellEditor[0] = null;
SWT入门-常用组件的使用(转)        cellEditor[1] = new ComboBoxCellEditor(tableViewer.getTable(),MyCellModifier.NAMES,SWT.READ_ONLY);
SWT入门-常用组件的使用(转)        cellEditor[2] = new CheckboxCellEditor(tableViewer.getTable());
SWT入门-常用组件的使用(转)        cellEditor[3] = new TextCellEditor(tableViewer.getTable());
SWT入门-常用组件的使用(转)        cellEditor[4] = null;
SWT入门-常用组件的使用(转)        tableViewer.setCellEditors(cellEditor);
SWT入门-常用组件的使用(转)        ICellModifier modifier = new MyCellModifier(tableViewer);
SWT入门-常用组件的使用(转)        tableViewer.setCellModifier(modifier);

我们让名字这一列用下拉条来编辑,让性别这一列变成类似checkbox的操作,让年龄这一类变成直接输入
ok,尝试一下。
三、问题出现,如果年龄的地方我们输入一个非数字呢,所以为了安全起见,我们加入一个验证器,禁止用户输入非数字
在上边的内容下加入

SWT入门-常用组件的使用(转)Text text = (Text)cellEditor[3].getControl();
SWT入门-常用组件的使用(转)        text.addVerifyListener(new VerifyListener(){
SWT入门-常用组件的使用(转)            public void verifyText(VerifyEvent e){
SWT入门-常用组件的使用(转)                String inStr = e.text;
SWT入门-常用组件的使用(转)                if (inStr.length() > 0){
SWT入门-常用组件的使用(转)                    try{
SWT入门-常用组件的使用(转)                        Integer.parseInt(inStr);
SWT入门-常用组件的使用(转)                        e.doit = true;
SWT入门-常用组件的使用(转)                    }catch(Exception ep){
SWT入门-常用组件的使用(转)                        e.doit = false;
SWT入门-常用组件的使用(转)                    }
SWT入门-常用组件的使用(转)                }
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)        });

好了,再试试是否不能输入非整数了?解决。其实还是有些问题的,试着输入个0,呵呵。这里就需要你自己按照自己的实际需求来实现了。
但作为demo这个的目的已经达到了。
SourceCode
=======================================================

Swt/Jface tableviewer入门教程四(加入filter ,改变行的颜色)

如果我们想根据某一列来过滤记录,如何实现呢?很简单,定义一个过滤器filter。这里只演示定义一个过滤器的情况。
现实中你可以定义多个灵活的过滤器,通过替换过滤器来实现各种各样的过滤。
一、过滤器代码:

SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.Viewer;
SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.ViewerFilter;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)public class MyFilter extends ViewerFilter {
SWT入门-常用组件的使用(转)    public boolean select(Viewer viewer, Object parentElement, Object element) {
SWT入门-常用组件的使用(转)        People p = (People) element;
SWT入门-常用组件的使用(转)        return p.getName().startsWith("张1");
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)}

然后在testTableViewer的shell.open前加入这个过滤器

SWT入门-常用组件的使用(转)tableViewer.addFilter(new MyFilter());

好了,看一下效果
二、如果我们想凸显某一条记录,想改变一下它的颜色,如果实现呢,简单,只要几句话就可以了。

Color color = Display.getDefault().getSystemColor(SWT.COLOR_RED);
table.getItems()[table.getItemCount()-1].setBackground(color);
table.redraw();

三、这里提一下,使用tabeViewer.setUseHashlookup(true)可以在tableviewer内部为数据记录和tableItem之间的映射创建一个hash表,这样可以加快tableItem的和记录间的查找速度,注意,这条语句必须在setInput之前加入才有效。
好了,到此tableviewer的基本的东西介绍的差不多了 
source下载:sourcecode
四:在现实的开发中,我们更多的是喜欢把一些简单的类用匿名类或者内部类的方式来实现。像之前例子中每个都单独一个类的情况并不多。
下边是和前边的source效果等同的source,不过是使用了匿名类和内部类。
source下载:SourceCode
=============================================

Swt/Jface treeViewer的使用

上边介绍了,tableviewer,这里介绍一下treeViewer,总的流程类似。
一、构造一个树形结构的数据出来,这里选择国家、城市、人来构造一个树形结构,代码如下:

1,定义一个接口

package model;

import java.util.List;

public interface Itree {
public String getName();
public void setName(String name);
public void setChildren(List Children);
public List getChildren();
} 2,国家 package model; import java.util.ArrayList;
import java.util.List; public class Country implements Itree{
private Long id;
private String name;
private List children = new ArrayList();
public Country(){
}
public Country(String name){
this.name = name;
}
public List getChildren() {
return children;
}
public void setChildren(List children) {
this.children = children;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} } 3,城市 package model; import java.util.ArrayList;
import java.util.List; public class City implements Itree{
private Long id;
private String name;
private List children = new ArrayList();
public City(){
}
public City(String name){
this.name = name;
}
public List getChildren() {
return children;
}
public void setChildren(List children) {
this.children = children;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
} 4,人 package model; import java.util.ArrayList;
import java.util.List; public class People implements Itree{
private Long id;
private String name;
public People(){
}
public People(String name){
this.name = name;
}
public List getChildren() {
return null;
}
public void setChildren(List children) {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
} 5,把这些元素组织起来 package model; import java.util.ArrayList;
import java.util.List; public class Factory {
@SuppressWarnings("unchecked")
public static List createTree(){
//生成国家
Country cn = new Country("中国");
Country us = new Country("美国");
Country jp = new Country("日本");
//生成城市
City beijing = new City("北京");
City shanghai = new City("上海");
City newyork = new City("纽约");
City la = new City("洛杉矶");
City tokyo = new City("东京");
City osaka = new City("大阪");
//北京人
ArrayList list = new ArrayList();
list.add(new People("张三"));
list.add(new People("李四"));
list.add(new People("王五"));
beijing.setChildren(list);
//上海人
list = new ArrayList();
list.add(new People("翠花"));
list.add(new People("小红"));
list.add(new People("小崔"));
shanghai.setChildren(list);
//纽约人
list = new ArrayList();
list.add(new People("tom"));
list.add(new People("rose"));
list.add(new People("john"));
newyork.setChildren(list);
//洛杉矶人
list = new ArrayList();
list.add(new People("Sofia"));
list.add(new People("sarah"));
list.add(new People("Jennifer"));
la.setChildren(list);
//东京人
list = new ArrayList();
list.add(new People("渡边"));
list.add(new People("鬼冢"));
list.add(new People("山本"));
tokyo.setChildren(list);
//大阪人
list = new ArrayList();
list.add(new People("奈奈子"));
list.add(new People("菜菜子"));
list.add(new People("新垣结衣"));
osaka.setChildren(list); //关联城市与国家
//中国
ArrayList citys = new ArrayList();
citys.add(beijing);
citys.add(shanghai);
cn.setChildren(citys);
//美国
citys = new ArrayList();
citys.add(newyork);
citys.add(la);
us.setChildren(citys);
//日本
citys = new ArrayList();
citys.add(tokyo);
citys.add(osaka);
jp.setChildren(citys);
//国家列表
ArrayList countrys = new ArrayList();
countrys.add(cn);
countrys.add(us);
countrys.add(jp);
return countrys;
}
} 二、定义内容器和标签器
1,内容器 import java.util.List; import model.Itree; import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer; public class TreeContentProvider implements IStructuredContentProvider, ITreeContentProvider { public Object[] getElements(Object inputElement) {
if (inputElement instanceof List){
List input = (List)inputElement;
return input.toArray();
}
return new Object[0];
}
public Object[] getChildren(Object parentElement) {
Itree node = (Itree)parentElement;
List list = node.getChildren();
if(list == null){
return new Object[0];
}
return list.toArray();
} public boolean hasChildren(Object element) {
Itree node = (Itree)element;
List list = node.getChildren();
return !(list == null || list.isEmpty());
}
//以下三个函数根据需要填充
public Object getParent(Object element) {
return null;
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
public void dispose() {
}
}
2,标签器: import model.Itree; import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image; public class TreeLabelProvider extends LabelProvider implements ILabelProvider {
public String getText(Object element) {
Itree node = (Itree)element;
return node.getName();
}
public Image getImage(Object element) {
return null;
}
}
三、好了,准备工作做好了,把上边的内容利用起来就好了。 import model.Factory; import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree; public class TestTreeViewer { private static Tree tree;
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(500, 375);
shell.setText("SWT Application");
//
final TreeViewer treeViewer = new TreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
tree = treeViewer.getTree();
tree.setBounds(83, 75, 264, 185); treeViewer.setLabelProvider(new TreeLabelProvider());
treeViewer.setContentProvider(new TreeContentProvider());
treeViewer.setInput(Factory.createTree()); shell.open();
shell.setLayout(new FillLayout());
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} }
SWT入门-常用组件的使用(转)

看看是不是已经实现了treeViewer
四、上边是简单的treeViewer,如果我们需要带checkbox的treeViewer,简单,只需要更改

SWT入门-常用组件的使用(转)final TreeViewer treeViewer = new TreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
SWT入门-常用组件的使用(转)

把TreeViewer换成CheckboxTreeViewer。这就是mvc的好处了。
但现实中我们多用ContainerCheckedTreeViewer代替CheckboxTreeViewer,因为这个提供了更多的功能。
CheckboxTreeViewer是TreeViewer的子类,  ContainerCheckedTreeViewer是CheckboxTreeViewer的子类,所以可以随便替换。
替换后:

SWT入门-常用组件的使用(转)final ContainerCheckedTreeViewer treeViewer = new ContainerCheckedTreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);

五、treeviewer和tableviewer都介绍过了,考虑一下把两个结合起来是不是我们经常需要的情况。尝试一下吧。
效果;

SWT入门-常用组件的使用(转)
========================================================

Swt/Jface listviewer的实现

前边将过了TableViewer和TreeViewer再来看ListViewer就简单了,操作步骤一样,但更简单。这里只给出使用的代码
一、代码,这个实现不同于前边是分开实现(都是public 的类),这里给出的是内部类的实现方式。

SWT入门-常用组件的使用(转)import java.util.ArrayList;
SWT入门-常用组件的使用(转)import java.util.List;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.IStructuredContentProvider;
SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.LabelProvider;
SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.ListViewer;
SWT入门-常用组件的使用(转)import org.eclipse.jface.viewers.Viewer;
SWT入门-常用组件的使用(转)import org.eclipse.swt.SWT;
SWT入门-常用组件的使用(转)import org.eclipse.swt.graphics.Image;
SWT入门-常用组件的使用(转)import org.eclipse.swt.layout.FillLayout;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Display;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Shell;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)public class TestListViewer {
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)    static class ListLabelProvider extends LabelProvider {
SWT入门-常用组件的使用(转)        public String getText(Object element) {
SWT入门-常用组件的使用(转)            Country country = (Country)element;
SWT入门-常用组件的使用(转)            return country.getName();
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        public Image getImage(Object element) {
SWT入门-常用组件的使用(转)            return null;
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    static class ContentProvider implements IStructuredContentProvider {
SWT入门-常用组件的使用(转)        public Object[] getElements(Object inputElement) {
SWT入门-常用组件的使用(转)            if(inputElement instanceof List){
SWT入门-常用组件的使用(转)                List list = (List)inputElement;
SWT入门-常用组件的使用(转)                return list.toArray();
SWT入门-常用组件的使用(转)            }
SWT入门-常用组件的使用(转)            return new Object[0];
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        public void dispose() {
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    static class Country {
SWT入门-常用组件的使用(转)        private String name;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)        public Country(){
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        public Country(String name){
SWT入门-常用组件的使用(转)            this.name = name;
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        public String getName() {
SWT入门-常用组件的使用(转)            return name;
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)        public void setName(String name) {
SWT入门-常用组件的使用(转)            this.name = name;
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        public static List getCountryList(){
SWT入门-常用组件的使用(转)            List list = new ArrayList();
SWT入门-常用组件的使用(转)            list.add(new Country("中国"));
SWT入门-常用组件的使用(转)            list.add(new Country("美国"));
SWT入门-常用组件的使用(转)            list.add(new Country("日本"));
SWT入门-常用组件的使用(转)            return list;
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    private static org.eclipse.swt.widgets.List list;
SWT入门-常用组件的使用(转)    /**
SWT入门-常用组件的使用(转)     * Launch the application
SWT入门-常用组件的使用(转)     * @param args
SWT入门-常用组件的使用(转)     */
SWT入门-常用组件的使用(转)    public static void main(String[] args) {
SWT入门-常用组件的使用(转)        final Display display = Display.getDefault();
SWT入门-常用组件的使用(转)        final Shell shell = new Shell();
SWT入门-常用组件的使用(转)        shell.setSize(500, 375);
SWT入门-常用组件的使用(转)        shell.setText("SWT Application");
SWT入门-常用组件的使用(转)        //
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        shell.open();
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)        final ListViewer listViewer = new ListViewer(shell, SWT.BORDER);
SWT入门-常用组件的使用(转)        listViewer.setLabelProvider(new ListLabelProvider());
SWT入门-常用组件的使用(转)        listViewer.setContentProvider(new ContentProvider());
SWT入门-常用组件的使用(转)        listViewer.setInput(new Object());
SWT入门-常用组件的使用(转)        list = listViewer.getList();
SWT入门-常用组件的使用(转)        list.setBounds(122, 63, 100, 100);
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        listViewer.setContentProvider(new ContentProvider());
SWT入门-常用组件的使用(转)        listViewer.setLabelProvider(new ListLabelProvider());
SWT入门-常用组件的使用(转)        listViewer.setInput(Country.getCountryList());
SWT入门-常用组件的使用(转)        //可以直接添加
SWT入门-常用组件的使用(转)        listViewer.add(new Country("英国"));
SWT入门-常用组件的使用(转)        shell.setLayout(new FillLayout());
SWT入门-常用组件的使用(转)        shell.layout();
SWT入门-常用组件的使用(转)        while (!shell.isDisposed()) {
SWT入门-常用组件的使用(转)            if (!display.readAndDispatch())
SWT入门-常用组件的使用(转)                display.sleep();
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)}
SWT入门-常用组件的使用(转)

二、注意代码的注释部分,可以直接添加和移除。 
===================================================

Jface的Hello world引出的问题

Jface的hello World网上到处都是,但简单的Hello world能引出很多需要注意的问题.
首先大部分网上的jface helloworld如下:

SWT入门-常用组件的使用(转)import org.eclipse.jface.window.ApplicationWindow;
SWT入门-常用组件的使用(转)import org.eclipse.swt.SWT;
SWT入门-常用组件的使用(转)import org.eclipse.swt.graphics.Point;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Composite;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Control;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Display;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Text;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)public class TestWindow extends ApplicationWindow {
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)    public TestWindow() {
SWT入门-常用组件的使用(转)        super(null);
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    protected Control createContents(Composite parent) {
SWT入门-常用组件的使用(转)        Text text = new Text(parent,SWT.NONE);
SWT入门-常用组件的使用(转)        text.setText("hello world");
SWT入门-常用组件的使用(转)        return parent;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public static void main(String args[]) {
SWT入门-常用组件的使用(转)        try {
SWT入门-常用组件的使用(转)            TestWindow window = new TestWindow();
SWT入门-常用组件的使用(转)            window.setBlockOnOpen(true);
SWT入门-常用组件的使用(转)            window.open();
SWT入门-常用组件的使用(转)            Display.getCurrent().dispose();
SWT入门-常用组件的使用(转)        } catch (Exception e) {
SWT入门-常用组件的使用(转)            e.printStackTrace();
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)}
SWT入门-常用组件的使用(转)

这个代码是可以运行的,而且运行的结果也看不出什么问题。但看不出来并不代表没有问题。下边我们来让问题显现
在createContents()函数中再加入一个Text代码变成

SWT入门-常用组件的使用(转)import org.eclipse.jface.window.ApplicationWindow;
SWT入门-常用组件的使用(转)import org.eclipse.swt.SWT;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Composite;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Control;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Display;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Text;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)public class TestWindow extends ApplicationWindow {
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)    public TestWindow() {
SWT入门-常用组件的使用(转)        super(null);
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    protected Control createContents(Composite parent) {
SWT入门-常用组件的使用(转)        Text text = new Text(parent,SWT.NONE);
SWT入门-常用组件的使用(转)        text.setText("hello world");
SWT入门-常用组件的使用(转)        Text text1 = new Text(parent,SWT.NONE);
SWT入门-常用组件的使用(转)        text1.setText("it's me");
SWT入门-常用组件的使用(转)        return parent;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public static void main(String args[]) {
SWT入门-常用组件的使用(转)        try {
SWT入门-常用组件的使用(转)            TestWindow window = new TestWindow();
SWT入门-常用组件的使用(转)            window.setBlockOnOpen(true);
SWT入门-常用组件的使用(转)            window.open();
SWT入门-常用组件的使用(转)            Display.getCurrent().dispose();
SWT入门-常用组件的使用(转)        } catch (Exception e) {
SWT入门-常用组件的使用(转)            e.printStackTrace();
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)}
SWT入门-常用组件的使用(转)

运行,并没有看到第二个Text,为什么?
是否没有设置text的Bounds?好设置一下

SWT入门-常用组件的使用(转)import org.eclipse.jface.window.ApplicationWindow;
SWT入门-常用组件的使用(转)import org.eclipse.swt.SWT;
SWT入门-常用组件的使用(转)import org.eclipse.swt.graphics.Point;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Composite;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Control;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Display;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Text;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)public class TestWindow extends ApplicationWindow {
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)    public TestWindow() {
SWT入门-常用组件的使用(转)        super(null);
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    protected Control createContents(Composite parent) {
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)        Text text = new Text(parent, SWT.BORDER);
SWT入门-常用组件的使用(转)        text.setText("hello world");
SWT入门-常用组件的使用(转)        text.setBounds(59, 112, 80, 25);
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        Text text_1 = new Text(parent, SWT.BORDER);
SWT入门-常用组件的使用(转)        text_1.setText("it's me");
SWT入门-常用组件的使用(转)        text_1.setBounds(72, 221, 80, 25);
SWT入门-常用组件的使用(转)        return parent;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public static void main(String args[]) {
SWT入门-常用组件的使用(转)        try {
SWT入门-常用组件的使用(转)            TestWindow window = new TestWindow();
SWT入门-常用组件的使用(转)            window.setBlockOnOpen(true);
SWT入门-常用组件的使用(转)            window.open();
SWT入门-常用组件的使用(转)            Display.getCurrent().dispose();
SWT入门-常用组件的使用(转)        } catch (Exception e) {
SWT入门-常用组件的使用(转)            e.printStackTrace();
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    private void createActions() {
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)}
SWT入门-常用组件的使用(转)

效果依旧,那是为什么呢?
这是因为在createContents()方法中直接使用了参数中的parent,造成了布局(layout)的混乱,在只有一个的text的情况下看不出来,现在就看出来了。
解决办法:再构造一个composite,在我们平时使用的时候记得一定要构造一个自己的composite,设置自己的布局,不要直接使用参数中的composite

SWT入门-常用组件的使用(转)import org.eclipse.jface.window.ApplicationWindow;
SWT入门-常用组件的使用(转)import org.eclipse.swt.SWT;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Composite;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Control;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Display;
SWT入门-常用组件的使用(转)import org.eclipse.swt.widgets.Text;
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)public class TestWindow extends ApplicationWindow {
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)    public TestWindow() {
SWT入门-常用组件的使用(转)        super(null);
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    protected Control createContents(Composite parent) {
SWT入门-常用组件的使用(转)        Composite container = new Composite(parent, SWT.NONE);
SWT入门-常用组件的使用(转)
SWT入门-常用组件的使用(转)        Text text = new Text(container, SWT.BORDER);
SWT入门-常用组件的使用(转)        text.setText("hello world");
SWT入门-常用组件的使用(转)        text.setBounds(59, 112, 80, 25);
SWT入门-常用组件的使用(转)        
SWT入门-常用组件的使用(转)        Text text_1 = new Text(container, SWT.BORDER);
SWT入门-常用组件的使用(转)        text_1.setText("it's me");
SWT入门-常用组件的使用(转)        text_1.setBounds(72, 221, 80, 25);
SWT入门-常用组件的使用(转)        return container;
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    public static void main(String args[]) {
SWT入门-常用组件的使用(转)        try {
SWT入门-常用组件的使用(转)            TestWindow window = new TestWindow();
SWT入门-常用组件的使用(转)            window.setBlockOnOpen(true);
SWT入门-常用组件的使用(转)            window.open();
SWT入门-常用组件的使用(转)            Display.getCurrent().dispose();
SWT入门-常用组件的使用(转)        } catch (Exception e) {
SWT入门-常用组件的使用(转)            e.printStackTrace();
SWT入门-常用组件的使用(转)        }
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)    private void createActions() {
SWT入门-常用组件的使用(转)    }
SWT入门-常用组件的使用(转)}

SWT入门-常用组件的使用(转)的更多相关文章

  1. SWT常用组件(转)

    转载自:http://www.cnblogs.com/happyPawpaw/archive/2012/10/19/2730478.html 1按钮组件(Button) (1)Button组件常用样式 ...

  2. SWT常用组件

    SWT类所代表的事件常量: 事件类型常量 说明 SWT.Activate 当激活窗口时 SWT.Arm 菜单项被选中之前 SWT.Close 关闭窗口时 SWT.Collapse 折叠树的节点时 SW ...

  3. 微信小程序入门与实战 常用组件API开发技巧项目实战&ast;全

    第1章 什么是微信小程序? 第2章 小程序环境搭建与开发工具介绍 第3章 从一个简单的“欢迎“页面开始小程序之旅 第4章 第二个页面:新闻阅读列表 第5章 小程序的模板化与模块化 第6章 构建新闻详情 ...

  4. Jmeter Web 性能测试入门 &lpar;三&rpar;:Jmeter 常用组件说明

    线程组:用来设置并发的数量和模式.是用来模拟用户并发的组件.JMeter 的每个任务都是用线程来处理的. 线程数:要并发的请求数量. Ramp-Up Period: 在多次时间内把这些并发的请求发送完 ...

  5. EasyUI常用组件(基础)

    ---------------------------------------------------------------------------------------------------- ...

  6. SWT的基本组件使用

    1按钮组件(Button) (1)Button组件常用样式 SWT.PUSH按钮 SWT.CHECK多选按钮 SWT.RADIO单选按钮 SWT.ARROW箭头按钮 SWT.NONE默认按钮 SWT. ...

  7. java基础 常用组件

    几个常用组件: 在图形用户界面编程中,我们常常会提供用户登陆界面,比如登陆到会员管理系统,登陆到工资管理系统,仓库管理系统等,如下图我们就会用到: 1. 文本框(JTextField) 2. 密码框( ...

  8. Android常用组件

    UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...

  9. Android常用组件【转】

    UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...

随机推荐

  1. Java开发中经典的小实例-(输入三个数字判断三角形类型)

    import java.util.Scanner;public class threeTest {    public static void main(String[] args) {       ...

  2. Sass的学习

    第一章:Sass简介 一. 什么是CSS预处理器 定义:CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增加一些编程的特性,将CSS作为目标生成文件,然后开发者就只要使用 ...

  3. CLR via C&num;(09)-扩展方法

    对于一些现成的类,如果我们想添加一些新的方法来完善功能,但是不想改变已有的封装,也不想使用派生类,那么该怎么办呢?这里我们可以使用扩展方法. 一见钟情--初识扩展 扩展方法使您能够向现有类型“添加”方 ...

  4. 总体最小二乘(TLS)

    对于见得多了的东西,我往往就习以为常了,慢慢的就默认了它的存在,而不去思考内在的一些道理.总体最小二乘是一种推广最小二乘方法,本文的主要内容参考张贤达的<矩阵分析与应用>. 1. 最小二乘 ...

  5. TO~亲爱的自己

    你累的时候,谢绝别人的肩膀: 你扛不动的时候,拒绝别人的帮忙: 你和别人吃饭,不让别人买单你总是想我这样优秀善良, 总不给别人添麻烦,为什么总是找不到爱的人呢? 有时,爱只有在相处时才能找得到的, 是 ...

  6. &lbrack;Hibernate&rsqb; 基本增删查改

    本文记录,Java 应用通过 Hibernate 对数据库 MySQL 进行基本的增删改查操作,即CRUD. 本例子的目录结构如下 hibernate.cfg.xml 存储数据库信息,如数据库类型,账 ...

  7. linux grep命令详解(转)

    简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...

  8. 【ASP&period;NET Core快速入门】(三)准备CentOS和Nginx环境

    基本软件 VMware虚拟机 centos:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-170 ...

  9. tp5自定义分页参数

    代码示例: $data = db('activity') -> where($condition1)-> order('startline desc') -> paginate(2, ...

  10. P1821 &lbrack;USACO07FEB&rsqb;银牛派对Silver Cow Party

    题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the b ...