首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swingx DefaultColumnControlPopup,菜单仍然开着

Swingx DefaultColumnControlPopup,菜单仍然开着
EN

Stack Overflow用户
提问于 2013-10-03 10:44:21
回答 1查看 379关注 0票数 1

我有MyTable,它是JXTable的扩展

代码语言:javascript
复制
public class MyTable extends JXTable{...}

效果和预期一样好。现在,我想让DefaultColumnControlPopup菜单在弹出菜单中单击到元素后仍然打开,这样用户就可以进行多次单击,而无需在ColumnControlButton上进行烦人的单击。

有人知道怎么做吗?

我一直试图在本教程的基础上解决问题,但没有成功。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-03 17:06:26

经过详细的阐述,如果一个人知道怎么做就很容易了--很明显.

其他人的整体解决办法:

我有一个使用JXTable的类:

代码语言:javascript
复制
JXTable myTable = new JXTable(new MyTableModel())
...use_table_as_usually...

表的类:

代码语言:javascript
复制
public class MyTable extends JXTable{
    public MyTable(AbstractTableModel model){
        super(model);
        //remove items for horizontal scrollbar, pack and packall
        this.getActionMap().remove("column.horizontalScroll");
        this.getActionMap().remove("column.packAll");
        this.getActionMap().remove("column.packSelected");
        //first two columns should be shown permanently
        ColumnControlButton controlButton = new ColumnControlButton(this){
            @Override
            protected ColumnControlPopup createColumnControlPopup(){
                return (new NFColumnControlPopup());
            }

            class NFColumnControlPopup extends DefaultColumnControlPopup{
                @Override
                public void addVisibilityActionItems(List<? extends AbstractActionExt> actions){
                    for(int i = 0; i < actions.size(); i++){
                        AbstractActionExt action = actions.get(i);
                        JCheckBoxMenuItem chk = new JCheckBoxMenuItem(action);
                        chk.setUI(new KeepOpenCheckBox());
                        //disable first two items but they will be still shown greyed
                        if(i == 0 || i == 1){
                            chk.setEnabled(false);
                            chk.setSelected(false);
                        }
                        else{
                            chk.setEnabled(true);
                            chk.setSelected(true);
                        }
                        chk.addItemListener(action);
                        super.addItem(chk);
                    }
                }
            }
        };
        this.setColumnControl(controlButton);
    }
}

并最终使用自定义类来保持ColumnControlPopup打开:

代码语言:javascript
复制
public class KeepOpenCheckBox extends BasicCheckBoxMenuItemUI{
    public static ComponentUI createUI(JComponent c){
        return new KeepOpenCheckBox();
    }

    protected void doClick(MenuSelectionManager msm){
        menuItem.doClick(0);
    }
}

就这样。在本例中,混合了三种情况:-how删除水平滚动条、pack和packall中不需要的项;-how禁用ColumnControlPopup中的某些列控件,但将其显示为灰色且不带复选标记;-how在单击JCheckBoxMenuItem后保持ColumnControlPopup打开;

解决方案是基于我在互联网上发现的一些资源,但有些信息是旧的或不起作用的(在JMenu中工作,但在弹出菜单中没有)。

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

https://stackoverflow.com/questions/19157129

复制
相关文章

相似问题

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