GWT 2 ButtonCell在一行中添加事件

时间:2011-11-13 12:10:53

标签: java gwt

有人能帮助我吗?我是gwt的新手,也许这很简单。但我似乎无法弄清楚这一点...... 我在一个单元格中为一行创建了2个按钮,每个按钮都有这个方法:

protected void addButtonColumn(String header, final IHasValue<Row, Button> hasVal){
    Column<Row, String> column = new Column<Row, String>(new TextButtonCell()) {
        @Override
        public String getValue(Row object) {
            return ((Button)hasVal.getValue(object)).getText();
        }
    };
    column.setFieldUpdater(new FieldUpdater<Row, String>() {
        @Override
        public void update(int index, Row object, String value) {
            ((Button) hasVal.getValue(object)).click();
        }
    });
    table.addColumn(column, header);
}

我希望每个按钮在点击时有所不同,但它不起作用。我知道我应该在setfieldupdater做一些事情,但我不知道是什么。

1 个答案:

答案 0 :(得分:1)

您使用TextButtonCell来包含Button(即小部件)并没有多大意义 - 让单元格访问数据会不会更容易,并使用ValueUpdater直接触发基于该数据的某种行为?

单元格不是小部件 - 它们比小部件简单得多。这主要意味着两件事:他们画得更快,而且更愚蠢。这两件事都是由于单个单元实例用于以稍微不同的方式绘制许多数据。如果你要为每个元素构建一个按钮,那么使用基于单元格的小部件是没有意义的 - 你几乎把所有东西都画了两次,并且得到了两个世界中最糟糕的部分(代码慢,这很难与...合作。

不要使用附加Button的{​​{1}},而是使用其他抽象来处理点击,例如每行ClickHandler个实例,甚至更好,某种接受单击的行实例的处理程序。将Command实例作为方法的参数传入可能是有意义的(并且可能在FieldUpdater而不是IHasValue上制作String泛型,因此您的模型不需要包装小部件。)

(这可能不是直接回答你的问题,而是希望有助于阐明我们为什么要使用单元格,以及如何最好地编写利用单元格的代码。)