首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有多选特性的GXT - ComoboBox

具有多选特性的GXT - ComoboBox
EN

Stack Overflow用户
提问于 2012-02-17 20:24:24
回答 2查看 5.4K关注 0票数 1

我的任务是设计一个具有多选功能的size ComboBox (GXT)控件。我尝试使用ComboBox的setView设置CheckBoxListView,但似乎不起作用。如果有任何使用GXT框架的方法可以实现这一点,有谁可以指导我吗?

PS:我在sencha论坛(java类,源代码)中发现了一个名为XComboBox的组件,它工作得很好,但在GNU GPL许可下不能用作它。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-23 16:55:39

感谢@smiletolead的指导,我通过将对话框与CheckBoxListView和TriggerField类集成在一起找到了解决方案。

完整的代码清单是..

代码语言:javascript
运行
复制
    package com.ui.test.client;

    import java.util.List;

    import com.extjs.gxt.ui.client.data.ModelData;
    import com.extjs.gxt.ui.client.event.ComponentEvent;
    import com.extjs.gxt.ui.client.event.WindowEvent;
    import com.extjs.gxt.ui.client.event.WindowListener;
    import com.extjs.gxt.ui.client.store.ListStore;
    import com.extjs.gxt.ui.client.widget.CheckBoxListView;
    import com.extjs.gxt.ui.client.widget.Dialog;
    import com.extjs.gxt.ui.client.widget.form.TriggerField;
    import com.extjs.gxt.ui.client.widget.layout.FillLayout;
    import com.google.gwt.user.client.Element;

    public class MultiSelectComboBox extends TriggerField {

        private Dialog checkBoxListHolder;
        private CheckBoxListView listView;
        private ListStore store;

        private String delimiter = ",";
        private boolean readOnly;


        public MultiSelectComboBox() {
            store = new ListStore();
            listView = new CheckBoxListView();
        }




        @Override
        protected void onTriggerClick(ComponentEvent ce) {
            super.onTriggerClick(ce);
            if(readOnly) {
                return;
            }
            checkBoxListHolder.setSize(getWidth(), 200);
            listView.setWidth(getWidth());
            checkBoxListHolder.setPosition(getAbsoluteLeft(), 
                    getAbsoluteTop() + getHeight());
            if(checkBoxListHolder.isVisible()) {
                checkBoxListHolder.hide();
            }
            else {
                checkBoxListHolder.show();
            }
        }




        @Override
        protected void onRender(Element target, int index) {
            super.onRender(target, index);

            checkBoxListHolder = new Dialog();
            checkBoxListHolder.setClosable(false);
            checkBoxListHolder.setHeaderVisible(false);
            checkBoxListHolder.setFooter(false);
            checkBoxListHolder.setFrame(false);
            checkBoxListHolder.setResizable(false);
            checkBoxListHolder.setAutoHide(false);
            checkBoxListHolder.getButtonBar().setVisible(false);
            checkBoxListHolder.setLayout(new FillLayout());
            checkBoxListHolder.add(listView);
            listView.setStore(store);

            checkBoxListHolder.addWindowListener(new WindowListener(){

                @Override
                public void windowHide(WindowEvent we) {
                    setValue(parseCheckedValues(listView));
                }

            });

        }




        private String parseCheckedValues(CheckBoxListView checkBoxView) {
            StringBuffer buf = new StringBuffer();
            if(checkBoxView != null) {
                List selected = checkBoxView.getChecked();
                int index = 1, len = selected.size();
                for(D c : selected) {
                    buf.append(c.get(listView.getDisplayProperty()));
                    if(index  getListView() {
            return listView;
        }

        public void setListView(CheckBoxListView listView) {
            this.listView = listView;
        }

        public ListStore getStore() {
            return store;
        }

        public void setStore(ListStore store) {
            this.store = store;
        }

        public String getDelimiter() {
            return delimiter;
        }

        public void setDelimiter(String delimiter) {
            this.delimiter = delimiter;
        }

        public boolean isReadOnly() {
            return readOnly;
        }

        public void setReadOnly(boolean readOnly) {
            this.readOnly = readOnly;
        }


    }

代码已经在这里解释过了。http://bhat86.blogspot.com/2012/02/gxt-comobobox-with-multi-select-feature.html

谢谢!

票数 5
EN

Stack Overflow用户

发布于 2012-02-21 23:57:19

请参阅示例listviewadvanced list view。在开发具有多选选项的组合框时,它们可能会对您有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9328142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档