GWT CellTable在每行的最后一个单元格中需要有两个按钮

GWT CellTable在每行的最后一个单元格中需要有两个按钮,gwt,Gwt,我正在使用CellTable向其中添加列。 在每个单元格上添加行和单个数据时,效果很好 它有类似名称、年龄、地址的标题,下面有包含值的行 现在,我想在最后一行中创建一个Actions cloumn,在该列下面的行中的单个单元格中有两个按钮(Edit和Delete按钮),并相应地捕获按钮单击事件 Name Age Address Actions A 15 123 Edit Delete B 20 578 Edit Delete C 你能告诉我怎么做

我正在使用CellTable向其中添加列。 在每个单元格上添加行和单个数据时,效果很好

它有类似名称、年龄、地址的标题,下面有包含值的行

现在,我想在最后一行中创建一个Actions cloumn,在该列下面的行中的单个单元格中有两个按钮(Edit和Delete按钮),并相应地捕获按钮单击事件

Name Age Address   Actions
A    15    123    Edit Delete
B    20    578    Edit Delete    
C
你能告诉我怎么做吗


谢谢

实现这一点有两种方法:

  • 子类并实现render方法以创建两个按钮并处理其事件(有关更多详细信息,请参阅)
  • 使用a添加两个s
  • 第二种方法更简单、更干净。以下是代码:

    public void onModuleLoad() {
        CellTable<Person> table = new CellTable<Person>();
    
        List<HasCell<Person, ?>> cells = new LinkedList<HasCell<Person, ?>>();
        cells.add(new ActionHasCell("Edit", new Delegate<Person>() {
    
            @Override
            public void execute(Person object) {
               // EDIT CODE
            }
        }));
        cells.add(new ActionHasCell("Delete", new Delegate<Person>() {
    
            @Override
            public void execute(Person object) {
                // DELETE CODE
            }
        }));
    
        CompositeCell<Person> cell = new CompositeCell<Person>(cells);
        table.addColumn(new TextColumn<Person>() {
    
            @Override
            public String getValue(Person object) {
                return object.getName()
            }
        }, "Name");
    
        // ADD Cells for Age and Address
    
        table.addColumn(new Column<Person, Person>(cell) {
    
            @Override
            public Person getValue(Person object) {
                return object;
            }
        }, "Actions");
    
    
    }
    
    private class ActionHasCell implements HasCell<Person, Person> {
        private ActionCell<Person> cell;
    
        public ActionHasCell(String text, Delegate<Person> delegate) {
            cell = new ActionCell<Person>(text, delegate);
        }
    
        @Override
        public Cell<Person> getCell() {
            return cell;
        }
    
        @Override
        public FieldUpdater<Person, Person> getFieldUpdater() {
            return null;
        }
    
        @Override
        public Person getValue(Person object) {
            return object;
        }
    }
    
    模块加载()上的公共void{
    CellTable=新的CellTable();
    列表单元格=新建LinkedList();
    添加(新建ActionHasCell(“编辑”,新建委托)(){
    @凌驾
    公共void执行(Person对象){
    //编辑代码
    }
    }));
    添加(新建ActionHasCell(“删除”,新建委托)(){
    @凌驾
    公共void执行(Person对象){
    //删除代码
    }
    }));
    复合细胞=新的复合细胞(细胞);
    table.addColumn(新的TextColumn(){
    @凌驾
    公共字符串getValue(Person对象){
    返回object.getName()
    }
    }“姓名”);
    //为年龄和地址添加单元格
    表.addColumn(新列(单元格){
    @凌驾
    公共人物getValue(人物对象){
    返回对象;
    }
    }“行动”);
    }
    私有类ActionHasCell实现了HasCell{
    私人行动细胞;
    公共ActionHasCell(字符串文本,委托){
    单元格=新的ActionCell(文本,委托);
    }
    @凌驾
    公共单元getCell(){
    返回单元;
    }
    @凌驾
    公共字段更新程序getFieldUpdater(){
    返回null;
    }
    @凌驾
    公共人物getValue(人物对象){
    返回对象;
    }
    }
    
    上述解决方案非常完美!谢谢。 另外:如果您喜欢在ActionCell中设计按钮,那么您可以这样做->在类的构造中,您可以构建一个html输入,在“class”属性中,您可以添加一个css样式,这将被使用:

    public ActionHasCell(String text, Delegate<Person> delegate) {
            cell = new ActionCell<Person>(text, delegate) {
    
            public void render(Context context, Person person, SafeHtmlBuilder sb)
            {
                SafeHtml html = SafeHtmlUtils.fromTrustedString("<input type=\"button\" value=\"anynameyouwant\" class=\"cssstylename\" />");
                sb.append(html);
            }
    
        };
    }
    
    public ActionHasCell(字符串文本,委托){
    单元格=新操作单元格(文本,委托){
    公共void呈现(上下文、个人、安全HTMLBuilder sb)
    {
    SAFEHTMLHTML=SAFEHTMLTILS.fromTrustedString(“”);
    sb.append(html);
    }
    };
    }
    

    这次您不需要字符串,但您可以传递参数并使用它们来构建按钮。

    非常感谢,因为我是GWT的新手……这是一个很大的帮助。但是我在cellTable中找不到任何deleteRow方法。。。。请告诉我如何删除单击了delete的特定行。基本上,您必须将其从添加CellTable作为显示的
    列表DataProvider
    中删除。因此,一旦您从
    ListDataProvider
    中删除该项,CellTable将被刷新{-此行有多个标记-类型委托不是泛型的;不能用参数参数化-类型委托不是泛型的;不能用参数参数化