【发布时间】:2010-09-02 20:28:41
【问题描述】:
正如标题所述,我有一个JTable,但我无法编辑“任意”列。我有 4 列,只有第一列是可编辑的。第一列有文件和一个特殊的编辑器,接下来的两列有字符串,最后一列有整数。我正在使用自定义模型,并且从 isCellEditable 方法返回 true。当然,我首先咨询了几个网站寻求帮助,但我找不到任何有帮助的东西。我使用 java 源代码覆盖了几个 JTable 方法并插入打印语句。特别是,我发现 table.editCellAt(row, col) 总是返回 false,因为从单元格编辑器返回的编辑组件总是为 null。所以,我自然而然地尝试使用table.setDefaultEditor(String.class, new MyEditor()) 替换编辑器。奇怪的是,这没有工作。 String 列的所有编辑器仍然是 JTable 默认使用的 GenericEditor。然后我尝试通过执行以下操作将编辑器添加到每一列:
TableColumnModel model = table.getColumnModel();
for(int i = 1; i < model.getColumnCount(); i++){
model.getColumn(i).setCellEditor(new MyEditor());
}
请注意,i 从 1 开始,因为第一列已经有一个合适的编辑器。在这一点上我没有想法,所以我向 Stack Overflow 的好人寻求帮助。
编辑:我正在使用DefaultTableModel,我只是覆盖了isCellEditable 以确保它始终返回true(即使DefaultTableModel 应该默认这样做)。我这样做是为了减少无用、浪费的调试响应的数量。此外,一列可编辑但其他列不可编辑的事实似乎表明问题出在其他地方。
编辑:看来问题在于列创建。一位教授建议更改setAutoCreateColumnsFromModel,它似乎已经解决了这个问题。
【问题讨论】:
-
您有自定义代码但它不起作用?那么这就是我要开始的地方。首先使用 JDK 附带的类使代码工作。为此使用 DefaultTableModel。然后,一旦您证明它有效,您就可以使用自定义代码一次进行一项更改。当它停止工作时,您就知道问题出在哪里,您可以发布您的 SSCCE (sscce.org) 来显示问题。
-
@gerenba:我将您的附加信息迁移到了问题中。如果不正确,请恢复。
-
Swing 教程中有一个使用 DefaultTableModel 的简单示例,这可能是一个很好的 SSCCE 基础。 download.oracle.com/javase/tutorial/uiswing/components/…
-
距离您上次编辑已超过 5 小时,SSCCE 在哪里?这样做没有技巧,所以你一定是在做一些奇怪的事情。下面发布的 SSCCE 的简单示例。