`

GWT CellList MutilSelect

阅读更多
package com.cn.client;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.cell.client.Cell;
import com.google.gwt.cell.client.CheckboxCell;
import com.google.gwt.cell.client.CompositeCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.cell.client.HasCell;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.DefaultSelectionEventManager;
import com.google.gwt.view.client.MultiSelectionModel;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.SelectionChangeEvent;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class CellTest implements EntryPoint {

private Cell<Department> contactCell;
private Label selectedLabel = new Label();

public void onModuleLoad() {

List<Department> depts = new ArrayList<Department>();
Department c = new Department("项目部");
  c.setId(1);
  Department c1 = new Department("财务部");
  c1.setId(2);
  Department c2 = new Department("开发部");
  c2.setId(3);
  Department c3 = new Department("测试部");
  c3.setId(149);
  depts.add(c);
  depts.add(c1);
  depts.add(c2);
  depts.add(c3);
  final DefaultSelectionEventManager<Department> selectionManager = DefaultSelectionEventManager.createCheckboxManager();
  final MultiSelectionModel<Department> selectionModel = new MultiSelectionModel<Department>(DepartmentCell.KEY_PROVIDER);
  selectionModel.addSelectionChangeHandler(
          new SelectionChangeEvent.Handler() {
            public void onSelectionChange(SelectionChangeEvent event) {
              StringBuilder sb = new StringBuilder();
              boolean first = true;
              List<Department> selected = new ArrayList<Department>(
                  selectionModel.getSelectedSet());
              for (Department value : selected) {
                if (first) {
                first = false;
                } else {
                sb.append(",");
                }
                sb.append(value.getName());
              }
              selectedLabel.setText("选择:"+sb.toString());
            }
          });
    List<HasCell<Department, ?>> hasCells = new ArrayList<HasCell<Department, ?>>();
    hasCells.add(new HasCell<Department, Boolean>() {
      private CheckboxCell cell = new CheckboxCell(true, false);
      public Cell<Boolean> getCell() {
        return cell;
      }

      public FieldUpdater<Department, Boolean> getFieldUpdater() {
        return null;
      }

      public Boolean getValue(Department object) {
        return selectionModel.isSelected(object);
      }
    });
    hasCells.add(new HasCell<Department, Department>() {
      private DepartmentCell cell = new DepartmentCell();
      public Cell<Department> getCell() {
        return cell;
      }

      public FieldUpdater<Department, Department> getFieldUpdater() {
        return null;
      }

      public Department getValue(Department object) {
        return object;
      }
    });
    contactCell = new CompositeCell<Department>(hasCells) {
      @Override
      public void render(Context context, Department value, SafeHtmlBuilder sb) {
        sb.appendHtmlConstant("<table><tbody><tr>");
        super.render(context, value, sb);
        sb.appendHtmlConstant("</tr></tbody></table>");
      }
      @Override
      protected Element getContainerElement(Element parent) {
        return parent.getFirstChildElement().getFirstChildElement().getFirstChildElement();
      }
      @Override
      protected <X> void render(Context context, Department value,
          SafeHtmlBuilder sb, HasCell<Department, X> hasCell) {
        Cell<X> cell = hasCell.getCell();
        sb.appendHtmlConstant("<td>");
        cell.render(context, hasCell.getValue(value), sb);
        sb.appendHtmlConstant("</td>");
      }
    };

    final CellList<Department> cellList = new CellList<Department>(contactCell);
    cellList.setRowData(depts);
    cellList.setSelectionModel(selectionModel,selectionManager);
    HorizontalPanel hpanel = new HorizontalPanel();
    VerticalPanel vpanel = new VerticalPanel();
    vpanel.add(cellList);
    vpanel.add(selectedLabel);
    Button submitButton = new Button("提交");
    submitButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if(selectedLabel.getText() == null && selectedLabel.getText().equals("")){
Window.alert("没有选择!");
}else{
Window.alert(selectedLabel.getText());
}
}
});
    hpanel.add(vpanel);
    hpanel.add(submitButton);
    RootPanel.get("root").add(hpanel);
}

private static class DepartmentCell extends AbstractCell<Department> {
@Override
public void render(Context context,Department value, SafeHtmlBuilder sb) {
if (value == null) {
return;
}
sb.appendHtmlConstant("<table>");
sb.appendHtmlConstant("<td style='font-size:95%;'>");
    sb.appendEscaped(value.getName());
    sb.appendHtmlConstant("</td></tr></table>");
}

public static final ProvidesKey<Department> KEY_PROVIDER = new ProvidesKey<Department>() {
@Override
public Object getKey(Department item) {
    return item == null ? null : item.getId();
  }
};
}

private class Department implements Comparable<Department> {
private int id;
private String name;

public Department(String name) {
super();
this.name = name;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public int compareTo(Department o) {
return (o == null || o.name == null) ? -1 : -o.name.compareTo(name);
}

@Override
    public boolean equals(Object o) {
      if (o instanceof Department) {
        return id == ((Department) o).id;
      }
      return false;
    }
}
}

要实现单选则:cellList.setSelectionModel(selectionModel);
要实现多选则:cellList.setSelectionModel(selectionModel,selectionManager);



分享到:
评论

相关推荐

    GWT入门 GWT中文教程

    GWT,全称为Google Web Toolkit,是Google推出的一款开源JavaScript开发框架,允许Java开发者使用Java语言来编写Web应用。GWT通过编译器将Java代码转换为高效的JavaScript,从而在客户端浏览器上运行。这个“GWT入门...

    gwt 练习 gwt学习

    GWT,全称为Google Web Toolkit,是一个开源的Java框架,用于构建高性能、可维护的富互联网应用程序(RIA)。GWT允许开发者使用Java语言编写客户端代码,然后通过编译器将其转换为优化过的JavaScript,以便在各种...

    GWT快速开发(GWT) 是一个Java软件开发框架用于开发类似于Google Maps和Gmail的AJAX应用程序。GWT的设计参考Java AWT包设计,类命名规则、接口设计、事件监听等。你可以用Java编程语言开发你的界面,然后用GWT编译器将Java类转换成适合浏览器执行的...

    ### GWT快速开发知识点详解 #### 一、GWT简介 **Google Web Toolkit (GWT)** 是由Google推出的一款开源的Java开发框架,主要用于构建高度交互式的Web应用程序,特别是那些类似Google Maps和Gmail这样的AJAX应用。...

    GWT入门和进阶

    GWT的Cell Widgets和CellTable允许你创建高度可定制的列表或表格,它们以数据驱动,可以高效渲染大量数据。 **5. Deferred Binding** GWT的Deferred Binding可以根据不同的浏览器或配置生成不同的代码,实现更好的...

    Gwt中文手册,GWt入门

    Gwt中文手册,GWt入门Gwt中文手册,GWt入门Gwt中文手册,GWt入门

    GWT

    标题 "GWT" 指的是 Google Web Toolkit,这是一个开源的Java开发框架,主要用于构建高性能、跨浏览器的富互联网应用程序(Rich Internet Applications,简称RIA)。GWT通过将Java代码编译为JavaScript,使得开发者...

    smartgwt最新版本GWT的DEMO

    SmartGWT是基于Google Web Toolkit (GWT) 的一个开源框架,它为开发富互联网应用程序(RIA)提供了丰富的组件库和高级功能。SmartGWT的最新版本进一步提升了用户体验,简化了开发过程,提供了更多现代Web设计的需求...

    GWT Demo,GWT学习时的一些小例子

    **GWT 概述** GWT(Google Web Toolkit)是由Google开发的一款开源的JavaScript开发框架,主要用于构建高性能、跨浏览器的Web应用程序。GWT通过Java语言进行开发,并将Java代码编译成高效的JavaScript,使得开发者...

    GWT开发环境JAVA

    **GWT(Google Web Toolkit)开发环境JAVA** Google Web Toolkit(GWT)是一个开放源代码的Java框架,它允许开发者使用Java语言来编写富互联网应用程序(Rich Internet Applications,RIA),并将其编译成优化的...

    gwt-2.8.2 SDK 最新下载 google web toolkit

    Google Web Toolkit(GWT)是Google推出的一款开源的、基于Java的Web开发框架,它允许开发者使用Java语言来编写前端应用程序。GWT-2.8.2是该SDK的一个版本,提供了最新的特性和改进,旨在简化Web应用的开发流程,...

    GWT DEMO 增删改查

    GWT提供了`DataGrid`或`CellTable`组件,它们可以绑定数据源并显示数据。这些组件支持分页、排序和过滤等功能,使得数据浏览更加灵活。同时,`AsyncCallback`可以用于异步加载数据,确保用户体验流畅。 3. **更新...

    gwt-2.5.0库

    3. **用户界面改进**:GWT 2.5.0引入了新的UI组件和API,包括**Cell Widgets**,它们提供了一种更加灵活的方式来构建数据驱动的用户界面。同时,对于表单控件和布局管理也有显著优化。 4. **国际化支持**:增强了**...

    GWT简介.docx

    **GWT(Google Web Toolkit)简介** GWT,全称为Google Web Toolkit,是Google推出的一款开源的Java开发框架,主要用于构建高性能、跨浏览器的富互联网应用程序(Rich Internet Applications,简称RIA)。GWT允许...

    gwt揭秘源代码

    GWT,全称为Google Web Toolkit,是一个开源的Java框架,用于构建高性能、跨浏览器的Web应用程序。这本书《GWT 揭秘》显然深入探讨了GWT的内部机制和使用技巧,通过源代码来帮助读者更好地理解和应用这个强大的工具...

    Google plugin sdk GWT

    此外,GWT社区还提供了许多第三方库,如GWT-Bootstrap和GWT-Platform,这些可以帮助开发者更轻松地构建现代、响应式的Web应用。 总之,Google插件SDK是开发GWT应用的关键组成部分,它与Eclipse IDE结合,为Java...

    GWT中文教程(入门进阶)

    6. **Cell和CellWidget**:Cell库允许你构建高度可定制的列表和表格,CellWidget则是基于Cell构建的复合组件,如Tree或TabPanel。 7. **GWT Compiler**:GWT编译器将Java代码转换成优化的JavaScript,包括代码分割...

Global site tag (gtag.js) - Google Analytics