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

GWT-如何在同一页上添加多个CellTables,gwt,Gwt,我有一个使用StackLayoutPanel的页面 在这种情况下,3个堆栈需要单独的单元格表 目前我需要使用的事件有RangeChangeEvent、SelectionChangeEvent 现在的问题是如何区分OnRangeChangeEvent和其他OnRangeChangeEvent。您捕获的事件引用了源表。“事件。getSource()” 始终提供对导致事件的对象的引用 例如,如果您有三个表,并且您附加了以下相同的处理程序: RangeChangeEvent.Handler handle

我有一个使用StackLayoutPanel的页面

在这种情况下,3个堆栈需要单独的单元格表

目前我需要使用的事件有RangeChangeEvent、SelectionChangeEvent


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

您捕获的事件引用了源表。“事件。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

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

您是否为每个
单元格表设置了相同的事件处理程序?如果是这样,不要。您只需为每个
CellTable
创建不同的处理程序即可。虽然理论上可以像filip fku的示例中那样检测源代码,但如果您使用的是
SelectionModel
,则无法检测


一句话:您不应该尝试在多个对象上使用相同的处理程序,除非您绝对必须

呃,为每个CellTable使用不同的RangeChangeEvent.Handler和SelectionChangeEvent.Handler?很抱歉,这不能作为事件使用。getSource()返回SingleSelectionModel。对,我假设没有选择模型。我将更新这个示例。我认为,除非已明确设置,否则为触发它的对象查询事件源是危险的。事件类中getSource的javadoc提到它的类型和含义是任意的。它应该用作处理程序的辅助键。也可以在使用事件触发事件时进行设置bus@Guarav我不认为这是危险的,但我同意,如果你指出任何对象都可以被设置为源,那么这是行不通的。我假设这件事已经摆在桌面上了。