java - 从列控件弹出菜单中删除列

标签 java swing swingx jxtable

是否可以控制某个列是否应该在列控件弹出菜单中可用?我知道切换(使用 CheckBoxList 禁用/启用)并使列变灰。但我不想在弹出菜单中输入列,因为该列是 Jtable 中的必备列。我正在使用 JXTable。任何人有任何提示吗?

最佳答案

TableColumnExt 有一个 hideable 属性,可以有效地禁用隐藏。它仍然显示在弹出窗口中,您可以切换复选框(that's a bug, just filed - 菜单项应该被禁用;),但至少该列没有隐藏。要解决该错误,您可以实现一个不添加复选框的自定义列控件(正如 Robin 正确建议的那样),例如:

JXTable table = new JXTable(new AncientSwingTeam());
// here the hideable property is configured manually, 
// in production code you'll probably have a custom ColumnFactory
// doing it based on some data state 
table.getColumnExt(0).setHideable(false);
ColumnControlButton columnControl = new ColumnControlButton(table) {

    @Override
    protected ColumnVisibilityAction createColumnVisibilityAction(
            TableColumn column) {
        if (column instanceof TableColumnExt
                && !((TableColumnExt) column).isHideable())
            return null;
        return super.createColumnVisibilityAction(column);
    }

};
table.setColumnControl(columnControl);
table.setColumnControlVisible(true);

至于不包括菜单项:在引入可隐藏属性时,我们决定使用keeping the item in the list but disable it。因为用户可能会因为没有看到控件中的所有列而感到困惑。因此,一旦错误将被修复(刚刚完成,从修订 #4315 开始提交),我建议再次删除自定义列控件。不过,只是我的 2 欧分 :-)

关于java - 从列控件弹出菜单中删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18827754/

相关文章:

java - 用 Guava 和 Spring 注入(inject) synchronizedMultiMap?

java - 创建多个AsyncTask

java - 在 Netbeans 8.2 中设置 jdk9 的问题

java - 将 JPanel 排列在 ScrollPane 顶部,而不是居中

java - 围绕 JXLoginPane 示例理解框架的问题

java - Maven:如何使用输入参数编译项目

java - 更新 JFrame 中的 JPanel

java - 使用 JFileChooser 将图像加载到 JLabel 图标中

java - 多个 Swingbuilder 实例?

java - 如何将 jXDatePicker 与 maskFormatter 一起使用?