Reputation: 19
Is there any way to add clickHandlers (or any type of handler) to the headers of the rows in a grid?
Upvotes: 1
Views: 213
Reputation: 1611
You can extend com.google.gwt.user.cellview.client.Header
and override the following method to get click events:
public void onBrowserEvent(Cell.Context context, Element elem, NativeEvent nativeEvent)
For example:
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);
}
Upvotes: 1
Reputation: 5599
Use some widget as a header (a Label
for example) and add a handler to that widget:
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);
}
Upvotes: 1