GWT - 如何在同一页面上添加多个CellTable

时间:2011-11-03 23:47:36

标签: gwt

我有一个使用StackLayoutPanel的页面。

在这3个堆栈中需要单独的CellTables。

目前我需要使用的事件是RangeChangeEvent,SelectionChangeEvent。

现在的问题是如何区分OnRangeChangeEvent。

2 个答案:

答案 0 :(得分:1)

源表是由您捕获的事件引用的。 “event.getSource()”  总是提供引起事件的对象的引用。

例如,如果您有三个表,并且附加了如下所示的相同处理程序:

RangeChangeEvent.Handler handler = new RangeChangeEvent.Handler() { 
  @Override             
  public void onRangeChange(RangeChangeEvent event) {
    if(table1 == event.getSource()){
      // first table
    } else if (table2 == event.getSource()){
      // second table
    } else if (table3 == event.getSource()){
      // third table
    }           
 };

table1.addRangeChangeHandler(handler);
table2.addRangeChangeHandler(handler);
table3.addRangeChangeHandler(handler);

上面的示例假定表中没有指定选择模型。如果有,选择模型将成为事件的来源。

或者,您可以将特定于表的处理程序附加到每个表:

RangeChangeEvent.Handler handler1 = new RangeChangeEvent.Handler() { 
  @Override             
  public void onRangeChange(RangeChangeEvent event) {
      // Handle stuff happening to table 1
  }
};

RangeChangeEvent.Handler handler2 = new RangeChangeEvent.Handler() { 
  @Override             
  public void onRangeChange(RangeChangeEvent event) {
      // Handle stuff happening to table 2
  }
};

table1.addRangeChangeHandler(handler1);
table2.addRangeChangeHandler(handler2);
// And so on for any more tables

使用这种方法,您不必担心事件源,因为您已经知道哪个处理程序对应于哪个表。

答案 1 :(得分:0)

您是否为每个CellTable设置了相同的事件处理程序?如果是这样,不要。您可以为每个CellTable创建一个不同的处理程序。虽然理论上可以像在filip-fku的例子中那样检测源,但如果你使用SelectionModel则不会。

底线:除非绝对必须,否则不应尝试在多个对象上使用相同的处理程序。