当前位置: 首页 > 知识库问答 >
问题:

JTable单元格编辑器更改类型

钱均
2023-03-14

我有一个JTable,它应该是2列(String,JComboBox)。当我初始化表时,一切看起来都很好。只要一个I在表中选择了一个值,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;
        }
    });

共有1个答案

段干昊然
2023-03-14

>

  • 答案很简单不要将JComboBox放入xxxTableModel或为JComboBox.class设置GetColumClass这是错误的(当然是可能的,但会有很多副作用),xxxTableModel(指定用于)只能直接保存标准的Java数据类型

    xxxTableModel应该存储(如果您不想在Java数据类型之间进行解析)与DefaultComboBoxModel中存储的相同数据类型(注意清楚什么是MyPanel.xxx常量),例如,当DefaultComboBoxModel具有相同的数据类型时,在XXXTableModel存储String值,对于DateIconInteger

    有关阅读Oracle教程“如何使用表-使用组合框作为编辑器”的更多信息

  •  类似资料:
    • 问题内容: 我需要在jTable中显示数字,精确到小数点后两位。为此,我创建了一个自定义单元格编辑器,如下所示: 该单元格编辑器非常适合将点用作小数点的英语语言环境。但是在德语语言环境中,它不接受逗号作为小数点的值。请让我知道我的代码中有问题的地方。提前致谢。 编辑:这是我如何使其工作: 问题答案: 使用语言环境来发挥您的优势:

    • 我想要一个有4列的jtable。一列必须是组合框。其他列是字符串。 只要找到问题:在注释语句jcb.seteditable(true)时;,如果我在comboxcell上单击一次,它就会打开这个单元格。但我不知道为什么效果更好。此外,我希望combox可编辑。 我怎么能对其他细胞有同样的行为。 再次您好,我已经更新了代码,以便使-如果我通过重写方法在单元格上单击一次,单元格可以编辑-如果我通过重写

    • 我有一个jtable保存账本文件记录并将它们发送出去。

    • 设计定制JTable我已经知道DefaultCellEditor在其构造函数中允许使用JComboBox。单击此JComboBox以显示列表项时,它显示在JTable的其他单元格上方。问题是,我需要一个更复杂的行为,就像JComboBox提供的那样,这样我就用一个JList和一个JButton实现了一个JTextField,当点击JButton(或者用户在JTextField中输入文本)时,JLi

    • 我拥有的东西 两列JTable。第二列使用JComboBox作为单元格编辑器。 当我用origin列顺序编辑JComboBox单元格时,它工作得很好。但当我首先更改列时,比如切换2列(JComboBox列成为拳头),然后我编辑了JComboBox单元格引发bug。我必须单击该单元格两次才能触发编辑事件,否则,JComboBox将不被激活。

    • 问题内容: 我想制作一个可编辑的表,然后检查数据以确保其有效。我不确定如何仅更改一个单元格的颜色。我想要一个单元格,例如(0,0)并将前景颜色设置为红色。我已经阅读了SO和Oracle上有关自定义ColorRenderer的其他文章,但是我不知道如何使用它。 谢谢。 问题答案: 假设您要用其他颜色渲染的单元格代表一种状态(我将以“拒绝并批准”为例)。然后,我将在我的表模型中实现一个名为getSta