GWT-如何在同一页上添加多个CellTables
我有一个使用StackLayoutPanel的页面 在这种情况下,3个堆栈需要单独的单元格表 目前我需要使用的事件有RangeChangeEvent、SelectionChangeEventGWT-如何在同一页上添加多个CellTables,gwt,Gwt,我有一个使用StackLayoutPanel的页面 在这种情况下,3个堆栈需要单独的单元格表 目前我需要使用的事件有RangeChangeEvent、SelectionChangeEvent 现在的问题是如何区分OnRangeChangeEvent和其他OnRangeChangeEvent。您捕获的事件引用了源表。“事件。getSource()” 始终提供对导致事件的对象的引用 例如,如果您有三个表,并且您附加了以下相同的处理程序: RangeChangeEvent.Handler handle
现在的问题是如何区分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我不认为这是危险的,但我同意,如果你指出任何对象都可以被设置为源,那么这是行不通的。我假设这件事已经摆在桌面上了。