gwt-grid行标题单击事件

ryhaxcpt  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(273)

有没有办法将clickhandlers(或任何类型的处理程序)添加到网格中的行标题中?

yi0zb3m4

yi0zb3m41#

使用一些小部件作为标题(a) 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);
}
l7mqbcuq

l7mqbcuq2#

你可以延长 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);
}

相关问题