gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:21:17 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com