SWT中TableViewer的使用:

SWT中TableViewer的使用:

        在Java中,我们应用比PHP,ASP更加规范的方式来操作数据,将数据库中的记录当作一个数据对象,用一个类来表示,数据表的字段写成类的实例变量,即Java中被称为实体类.EJB和Hibernate都是用这种方式.(数据库--实体类--表格显示)

        使用的步骤:

            1. 依照表中的字段类创造一个相应的实体类:(下面是一个实体类的例子)

                    public class SomethingEntity{

                            private String name;

                            private boolean sex;

                            private int age;

 

                            public String getName(){ return name;}

                            public void setName(String s){ name = s;}

                            public boolean isSex() { return sex;}

                            public void setSex(boolean b){ sex = b;}

                            public int getAge(){ return age;}

                            public void setAge(int i){ age = i;}

                    }

            2. 数据的生成,创建对象工厂:(下面是一个对象工厂的例子)

                    public class SomethingFactory{

                        public static List getSomethings(){

                        List list = new ArrayList();

                                SomethingEntity sometihing = new SomethingEntity();

                                something.setName("某某");

                                something.setSex(true);

                                something.setAge(18);

                                list.add(something);

                                return list;

                            }

                        }

                    在实际中,getSomethings()方法的代码可以用从数据库中取数据的代码来代替.

                    List不是SWT的List.而是java.util.List list不是必须的,可以用Set,Map等.

                    List只是一个接口,而ArrayList才是实际应用的类.也可以用Vector,LinkedList等.

 

            3. 数据在TableViewer中的显示:

                    I. 定义一个TableViewer对象. 在定义时,可通过TableViewer构造函数提供的参数设置样式.

                    II. 将TableViewer置于容器类中,并布局.

                    III. 创建TableVewer中的列(TableColumn).

                    IV. 用setInput方法输入数据.

                   V. 设定内容器.

                    VI. 设定标签器.

                这里出现了2个新的概念:内容器,标签器.它们时JFace组件中经常用到的.实际上时IStructuredContextProvider和ITableLabelProvider这2个接口的实现类.作用时定义数据进入后在TableViewer中的显示.

                下面是一个实现的例子:

                        第一个文件(MainForm.java):

                                public class MainForm{

                                    public static void main(String[] args){

                                        MainForm window = new MainForm();

                                        window.open();

                                    }

                                   

                                    private TableViewer tableViewer;

                                    public void open(){

                                        final Display display = new Display();

                                        final Shell shell = new Shell();

                                        shell.setSize(500,150);

                                        shell.setLayout(new FillLayout());

                                        shell.setText("TableViewer实现");

 

                                        //调用自定义的createTableViewer方法

                                        createTableViewer(shell);

 

                                        tableViewer.setContentProvider(new TableViewerContentProvider());

 

                                        tableViewer.setLabelProvider(new TableViewerLabelProvider());

 

                                        tableViewer.setInput(SomethingFactory.getSomethings());

                                        shell.open();

                                        while(!shell.isDisposed()){

                                            if(!display.readAndDispatch()) display.sleep();

                                        }

                                    }

               

                                    //自定义方法创建TableViewer

                                    private void createTableViewer(Composite parent){

                                        tableViewer = new TableViewer(parent, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);

                                        Table table = tableViewer.getTable();

                                        table.setHeaderVisible(true);

                                        table.setLinesVisible(true);

                                        TableLayout tableLayout = new TableLayout();

                                        table.setLayout(tableLayout);


                                        tableLayout.addColumnData(new ColumnWeightData(40));
                                        new TableColumn(table, SWT.NONE).setText("姓名");
                                        tableLayout.addColumnData(new ColumnWeightData(20));
                                        new TableColumn(table, SWT.NONE).setText("性别");
                                        tableLayout.addColumnData(new ColumnWeightData(20));
                                        new TableColumn(table, SWT.NONE).setText("年龄");

                                    }

                                }

 

                        第二个文件(TableViewerContentProvider.java)(内容器):

                               

                        public class TableViewerContentProvider implements IStructuredContentProvider{

                                public Object[] getElements(Object element){

                                        if(element instanceof List)

                                            return ((List)element).toArray();

                                        else

                                            new Object[0];

                                        }

                                public void dispose() {}

                                public void inputChanged(Viewer v, Object oldInput, Object newInput){}

                                }

 

                            第三个文件(

                            import org.eclipse.jface.viewers.ILabelProviderListener;

                            import org.eclipse.jface.viewers.ITableLabelProvider;

                            import org.eclipse.swt.graphics.Image;

                            public class TableViewerLabelProvider implements ITableLabelProvider {

                                public String getColumnText(Object element, int col){

                                                SomethingEntity o = (SomethingEntity)element;

                                      if(col==0) return o.getName();

                                      if(col==1) return o.isSex() ? "男":"女";

                                        if(col==2) return "" + o.getAge();

                                return "";

                                    }

                            public Image getColumnImage(Object element, int columnIndex){

                            return null;

                                    }

                            public void addListener(ILableProviderListener listener){}

                            public void dispose() {}

                                    public boolean isLableProperty(Object element, String property){

                                    return false;

                                    }

                                    public void removeListener(ILabelProviderListener listener){}

                                    }

                            }


                                     

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值