Swingx DefaultColumnControlPopup仍然打开菜单

时间:2013-10-03 10:44:21

标签: java swing swingx

MyTableJXTable的扩展名:

public class MyTable extends JXTable{...}

按预期正常工作。现在我想在弹出菜单中单击元素后让DefaultColumnControlPopup菜单仍然打开,这样用户可以在没有恼人的ClickControlButton点击的情况下进行多次点击。

有人知道怎么做吗?

我一直试图根据this tutorial来解决,但没有成功。

1 个答案:

答案 0 :(得分:0)

经过一番阐述后,如果有人知道如何做就很容易 - 显而易见......

其他人的整体解决方案:

我上课时我正在使用JXTable:

JXTable myTable = new JXTable(new MyTableModel())
...use_table_as_usually...

表的类:

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开放的自定义类:

public class KeepOpenCheckBox extends BasicCheckBoxMenuItemUI{
    public static ComponentUI createUI(JComponent c){
        return new KeepOpenCheckBox();
    }

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

这就是全部。在这个例子中混合了3件事: - 如何删除水平滚动条,包装和打包的不需要的项目; - 如何从ColumnControlPopup禁用某些列控件,但保持显示为灰色且没有复选标记; - 点击ColumnControlPopup;

后如何保持JCheckBoxMenuItem打开

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