我有一个使用StackLayoutPanel的页面。
在这3个堆栈中需要单独的CellTables。
目前我需要使用的事件是RangeChangeEvent,SelectionChangeEvent。
现在的问题是如何区分OnRangeChangeEvent。
答案 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
则不会。
底线:除非绝对必须,否则不应尝试在多个对象上使用相同的处理程序。