首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

14.7  带复选框的表格(CheckboxTableViewer类)

带复选框的表格如图14.10所示,它具有如下功能:

  ● 单击“全选”按钮时,将表格中的所有记录选中(选中复选框)。

  ● 单击“全不选”按钮时,取消所有选择(取消选中复选框)。

  ● 单击“删除”按钮时,将所有选中复选框的记录删除。

图14.10  带复选框的表格

本节实例在前几节的代码基础上修改完成(完整代码见配书光盘的TableViewer6.java文件)。要完成此实例需要如下几个步骤。

14.7.1  使用表格的复选框式样

(1)在创建TableViewer对象时多加一个SWT.CHECK式样,表格变为复选框式。复选框式的表格要取得选中的记录,还需要增加一个CheckboxTableViewer对象来辅助表格的使用,因为仅TableViewer对象无法取得选中的记录。

final TableViewer tv = new TableViewer(viewForm, SWT.CHECK | SWT.MULTI | SWT.……

final CheckboxTableViewer ctv = new CheckboxTableViewer(tv.getTable());

(2)修改创建MyActionGroup的语句,将CheckboxTableViewer的ctv对象作构造函数的第二个参数传入,因为MyActionGroup中的Action需要用到此对象。

MyActionGroup actionGroup = new MyActionGroup(tv, ctv);

这一步完成后,因为还没有对MyActionGroup类作相应改动,Eclipse会显示错误。下面开始修改MyActionGroup类。

14.7.2  修改MyActionGroup类

在原有MyActionGroup类的代码中作如下几处修改:

  ● 新增一个用于接受CheckboxTableViewer对象的构造函数。

  ● 增加“全选”和“全不选”两个Action类,并相应修改fillActionToolBars方法。

  ● 修改“删除”的RemoveAction,改由CheckboxTableViewer来取得选中的记录。因为前几节的程序也用到RemoveAction,为了兼容,所以RemoveAction原有的处理代码还不能废弃掉。可以加一个表格是否为复选框式样的判断,以决定使用哪种删除处理代码。

具体代码如下所示:(和原代码相同部分用省略号代替)

public class MyActionGroup extends ActionGroup {

    private TableViewer tv;

private CheckboxTableViewer ctv; //新增的语句

public MyActionGroup(TableViewer v) {

    this.tv = v;

}

    //新增一个构造函数

    public MyActionGroup(TableViewer v, CheckboxTableViewer ctv) {

        this.tv = v;

        this.ctv = ctv;

    }

……

    //修改原来的“删除”Action的run方法

    private class RemoveAction extends Action {

        ……

        public void run() {

                            if (ctv != null) {

                                     Object[ ] checkObj = ctv.getCheckedElements(); // 取得打勾的记录

                                     if (checkObj.length == 0) {// 判断是否有勾选复选框

                                               MessageDialog.openInformation(null, "提示", "请先勾选记录");

                                               return;

                                     }

                                     for (int i = 0; i < checkObj.length; i++) {

                                               PeopleEntity o = (PeopleEntity) checkObj[i];

                                               ctv.remove(o);// 从表格界面上删除

                                               List list = (List) tv.getInput();

                                               list.remove(o);// 从数据模型的List容器中删除

                                               // ....,从数据库中删除记录(略)

                                     }

                            } else {

                                     IStructuredSelection s = (IStructuredSelection) tv.getSelection();

                                     if (s.isEmpty()) {// 判断是否有选择

                                               MessageDialog.openInformation(null, "提示", "请先选择");

                                               return;

                                     }

                                     for (Iterator it = s.iterator(); it.hasNext();) {

                                               PeopleEntity o = (PeopleEntity) it.next();

                                               tv.remove(o);// 从表格界面上删除

                                               List list = (List) tv.getInput();

                                               list.remove(o); // 从数据模型的List容器中删除

                                               // ....,从数据库中删除记录(略)

                                     }

                            }           

        }

}

……

         //新增的“全选”Action

    private class SelectAllAction extends Action {

        public SelectAllAction() {

            setHoverImageDescriptor(getImageDesc("selectall.gif"));

            setText("全选");

        }

        public void run() {

            if (ctv != null) ctv.setAllChecked(true); //将所有复选框打勾

        }

}

         //新增的“全不选”Action

    private class DeselectAction extends Action {

        public DeselectAction() {

            setHoverImageDescriptor(getImageDesc("deselect.gif"));

            setText("全不选");

        }

        public void run() {

            if (ctv != null) ctv.setAllChecked(false); //取消所有复选框打勾

        }

    }

        

    //修改此方法将“全选”、“全不选”加入

    public void fillActionToolBars(ToolBarManager actionBarManager) {

        ……

        Action selAllAction = new SelectAllAction();

        Action deselAction = new DeselectAction();

        ……

        actionBarManager.add(createContributionItem(selAllAction));

        actionBarManager.add(createContributionItem(deselAction));

        actionBarManager.update(true); // 更新工具栏,否则工具栏不显示任何按钮

    }

}

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论