有没有办法将 clickHandlers(或任何类型的处理程序)添加到网格中行的标题中?
答案 0 :(得分:1)
使用一些小部件作为标题(例如 Label
)并向该小部件添加处理程序:
Grid grid = new Grid(5, 5);
for(int col = 0; col < 5; col++) {
Label headerLabel = new Label("Header " + col);
headerLabel.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Window.alert("Click!");
}
});
grid.setWidget(0, col, headerLabel);
}
for(int row = 1; row < 5; row++) {
for(int col = 0; col < 5; col++)
grid.setText(row, col, row + ", " + col);
}
答案 1 :(得分:1)
您可以扩展 com.google.gwt.user.cellview.client.Header
并覆盖以下方法以获取点击事件:
public void onBrowserEvent(Cell.Context context, Element elem, NativeEvent nativeEvent)
例如:
private abstract class ClickableTextHeader extends Header<String>
{
private String colmName;
public ClickableTextHeader(String colmName)
{
super(new ClickableTextCell());
this.colmName = colmName;
}
@Override
public String getValue()
{
return colmName;
}
@Override
public void onBrowserEvent(Cell.Context context, Element elem, NativeEvent nativeEvent)
{
//Window.alert("foo!!!");
// Call your onClick() method:
onClick(elem.getAbsoluteLeft(), elem.getAbsoluteTop());
}
/**
* Override this method to handle click event.
*/
abstract protected void onClick(int buttonLeftPos, int buttonTopPos);
}