【问题标题】:How to set icons in Tree Grid GXT(GWT) columns?如何在 Tree Grid GXT(GWT) 列中设置图标?
【发布时间】:2017-08-08 09:59:02
【问题描述】:

我正在开发 GWT 应用程序,我应该将 Tree Grid 中的默认图标更改为我自己的图标。在其他情况下,我可以轻松设置图标,但当我有树形网格时,情况并非如此。当我只有默认网格时,我设置图标的代码是这样的:

Protected List<ColumnConfig> getColumns() {
        List<ColumnConfig> columnConfigs = new ArrayList<ColumnConfig>();

        ColumnConfig columnConfig = new ColumnConfig("status", MSGS.gridUserColumnHeaderStatus(), 50);
        GridCellRenderer<GwtUser> setStatusIcon = new GridCellRenderer<GwtUser>() {

            public String render(GwtUser gwtUser, String property, ColumnData config, int rowIndex, int colIndex, ListStore<GwtUser> deviceList, Grid<GwtUser> grid) {

                KapuaIcon icon;
                if (gwtUser.getStatusEnum() != null) {
                    switch (gwtUser.getStatusEnum()) {
                    case DISABLED:
                        icon = new KapuaIcon(IconSet.USER);
                        icon.setColor(Color.RED);
                        break;
                    case ENABLED:
                        icon = new KapuaIcon(IconSet.USER);
                        icon.setColor(Color.GREEN);
                        break;
                    default:
                        icon = new KapuaIcon(IconSet.USER);
                        icon.setColor(Color.GREY);
                        break;
                    }
                } else {
                    icon = new KapuaIcon(IconSet.USER);
                    icon.setColor(Color.GREY);
                }

                return icon.getInlineHTML();
            }
        };
        columnConfig.setRenderer(setStatusIcon);
        columnConfig.setAlignment(HorizontalAlignment.CENTER);
        columnConfig.setSortable(false);
        columnConfigs.add(columnConfig);

但是当我将它应用到我的树形网格时,只有第一个项目有一个图标,我无法扩展网格。这是我当前的树网格代码

 List<ColumnConfig> configs = new ArrayList<ColumnConfig>();

        ColumnConfig column = new ColumnConfig("topicName", MSGS.topicInfoTableTopicHeader(), 150);
        column.setRenderer(new TreeGridCellRenderer<GwtTopic>());
        configs.add(column);

        column = new ColumnConfig("timestamp", MSGS.topicInfoTableLastPostedHeader(), 150);
        configs.add(column);

        store = new TreeStore<GwtTopic>();
        AsyncCallback<List<GwtTopic>> topicsCallback = new AsyncCallback<List<GwtTopic>>() {

            @Override
            public void onSuccess(List<GwtTopic> topics) {
                store.add(topics, true);
                topicInfoGrid.unmask();
            }

            @Override
            public void onFailure(Throwable t) {
                FailureHandler.handle(t);
                topicInfoGrid.unmask();
            }
        };
        dataService.findTopicsTree(currentSession.getSelectedAccount().getId(), topicsCallback);
        topicInfoGrid = new TreeGrid<GwtTopic>(store, new ColumnModel(configs));
        topicInfoGrid.setBorders(false);
        topicInfoGrid.setStateful(false);
        topicInfoGrid.setLoadMask(true);
        topicInfoGrid.mask("Loading");
        topicInfoGrid.setStripeRows(true);
        topicInfoGrid.getView().setAutoFill(true);
        topicInfoGrid.getView().setEmptyText(MSGS.topicInfoGridEmptyText());
        topicInfoGrid.disableTextSelection(false);

如何更改此代码以设置我自己的图标?

【问题讨论】:

    标签: java gwt tree gxt treegrid


    【解决方案1】:

    你可以使用 setIconProvider 方法来改变叶子的图标:

    topicInfoGrid.setIconProvider(new IconProvider<GwtTopic>() {
                @Override
                public ImageResource getIcon(GwtTopic gwtTopic) {
                    GwtTopicType type = gwtTopic.getType();
                    if (type == GwtTopicType.Folder) {
                        if (topicInfoGrid.isExpanded(gwtTopic)) return new TopicInfoResources.Instance.iconFolderOpen();
                        else return TopicInfoResources.Instance.iconFolder();
                    }
                    return TopicInfoResources.Instance.user();
                }
            });
    

    这是扩展 ClientBundle 的接口:

    public interface TopicInfoResources extends ClientBundle
    {
        public static final TopicInfoResources Instance = GWT.create(TopicInfoResources.class);
    
        @Source("folder.png")               ImageResource iconFolder();
        @Source("folder-open.png")          ImageResource iconFolderOpen();
        @Source("user.png")                 ImageResource user();
    }
    

    希望这会有所帮助!

    【讨论】:

    • 我不确定 KapuaIcon() 背后是什么,我认为它是 ImageResource 的实现。我正在编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多