GXT:取消网格标题上的点击事件

时间:2014-11-11 16:32:24

标签: java gwt gxt

我有一个类似this one的网格。此小组件的默认行为是在单击标题时对列进行排序。我想禁用它,只留下上下文菜单中的选项。

grid.addHeaderClickHandler(new HeaderClickHandler() {

    @Override
    public void onHeaderClick(HeaderClickEvent event) {
        event.getEvent().cancelBubble(true);
        event.getEvent().preventDefault();
        event.getEvent().stopPropagation();
        Window.alert("Event caught");
    }
});

在排序之前显示警报。但是,当点击Ok时,默认行为就会启动。

你对如何做到这一点有什么建议吗?

3 个答案:

答案 0 :(得分:2)

可能有效的解决方案是使用NativePreviewHandler,类似于

Event.addNativePreviewHandler(new NativePreviewHandler()
    {
        @Override
        public void onPreviewNativeEvent(final NativePreviewEvent event)
        {
            if (event.getTypeInt() == Event.ONCLICK)
            {
                Element targetElement = Element.as(event.getNativeEvent().getEventTarget());
                if (!tableHeader.asWidget().getElement().isOrHasChild(targetElement))
                {
                    event.getNativeEvent().stopPropagation();
                }
            }
        }
    });

答案 1 :(得分:1)

为了禁用排序,您必须配置列以禁止排序。

E.g。如果您创建这样的列(基于http://www.sencha.com/examples/#ExamplePlace:basicgrid的源代码)

ColumnConfig<Stock, String> symbolCol = new ColumnConfig<Stock, String>(props.symbol(), 100, "Symbol");

通过添加

禁用排序
symbolCol.setSortable(false);

有关文档(和其他选项),请参阅http://dev.sencha.com/deploy/gxt-3.0.0/javadoc/gxt/com/sencha/gxt/widget/core/client/grid/ColumnConfig.html#setSortable%28boolean%29

答案 2 :(得分:1)

好的,我发现它grid.getView().setSortingEnabled(false);。这将在单击标题时禁用排序,但保留菜单项。