Aroone Komal
Aroone Komal

Reputation: 19

GWT - Grid Row Header Click Event

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

Answers (2)

Robert Newton
Robert Newton

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

Adam
Adam

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

Related Questions