java - JTable 单元格编辑器更改类型

标签 java swing jtable jcombobox tablecelleditor

我有一个 JTable,应该有 2 列(字符串,JComboBox)。当我初始化表时,一切看起来都很好。一旦我在表中选择一个值,JComboBox 单元格就会获取所选项目的数据类型。

我想将 JCOmboBox 保留在那里并让它触发数据更改事件,并且表忽略该列中的数据更改并保持填充 ComboBox。

我的表将此作为覆盖

@Override
public TableCellEditor getCellEditor(int row, int column) {
    Object value = super.getValueAt(row, column);
    if (value != null) {
        if (value instanceof JComboBox) {
            return new DefaultCellEditor((JComboBox) value);
        }
        return getDefaultEditor(value.getClass());
    }
    return super.getCellEditor(row, column);
}

实现

    JComboBox uploadBox = new JComboBox();
    uploadBox.addItem(MyPanel.UPLOAD_OPTIONS.PROMPT);
    uploadBox.addItem(MyPanel.UPLOAD_OPTIONS.UPLOAD);
    uploadBox.addItem(MyPanel.UPLOAD_OPTIONS.DONT_UPLOAD);

    Object[][] tableData = new Object[][]{
        {"Upload data on save", uploadBox}
    };



    table.setModel(
            new DefaultTableModel(tableData, new String[]{"Description", "Options"}) {
        Class[] types = new Class[]{String.class, JComboBox.class};
        boolean[] canEdit = new boolean[]{false, true};

        @Override
        public Class getColumnClass(int columnIndex) {
            return types[columnIndex];
        }

        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return canEdit[columnIndex];
        }


    });

    table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRenderer() {

        @Override
        public Component getTableCellRendererComponent(JTable jtable, Object o, boolean bln, boolean bln1, int i, int i1) {
            return (Component)o;
        }
    });

最佳答案

  • 答案很简单,不要将 JComboBox 放入 XxxTableModel 或为 JComboBox.class 设置 getColumClass ,这是错误的(当然是可能的,但会带来一堆副作用),XxxTableModel(指定用于)只能直接保存标准 Java 数据类型(String日期图标/ImageIcon整数 double 等...)

  • XxxTableModel 应该存储(如果您不想在 Java 数据类型之间解析)与存储在 DefaultComboBoxModel 中的数据类型相同的数据类型(注意明确常量是什么MyPanel.XXX),例如,当DefaultComboBoxModel具有相同数据时,在XxxTableModel中存储String值类型,DateIcon/ImageIconIntegerDouble 的类似逻辑

  • 了解更多信息请阅读 Oracle 教程 How to use Tables - Using a Combo Box as an Editor

关于java - JTable 单元格编辑器更改类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20573857/

相关文章:

java - 需要帮助确定最大和最小用户输入

java - 集合未充满 OneToMany 关系 - EclipseLink

java - HTML5视频源不理解文件存储路径

java - 检索 java swing JFrame 图标

java - 方法 add(Component) 不适用于参数

java - JTable 中的重音在 Eclipse 中显示,但在 .jar 中不显示

java - 如何删除默认边框以及如何锚定 jtable 的列标题?

java - 程序化登录

java - 如何使 JTable 单元格(链接)可点击

java - 在任何屏幕分辨率下定位图像