在我的JTable中,我有两个可编辑的数字列。这两列的编辑器扩展了AbstractCellEditor,并使用JFormattedTextField作为编辑组件。
问题是输入的格式取决于行中另一列的值。如果满足条件X,则小数位数应为Y,否则应为Y + 2。
我试图覆盖getTableCellEditor(..)方法,以便每行关联一个TableCellEditor。见this example。但是,由于我有两个可编辑的列,每行共享一个TableCellEditor对象会产生一些非常奇怪的结果。我不认为这是一个合适的解决方案。
非常感谢任何有关如何处理此问题的想法!
谢谢!
答案 0 :(得分:3)
我认为您不需要每行关联一个TableCellEditor。
您只需要一个,他自己可以访问其他数据。在getTableCellEditor()中,您可以访问该表以及坐标(列,行)。
通过这种方式,您可以直接在表格中询问当前行所需列的值。
请记住,像渲染器一样,单元格编辑器是“共享的”。您确实要求同一个对象为您提供编辑器组件(大多数时候TableCellEditor
本身,例如扩展JFormattedTextField
。因此,您不需要每行放置一个,将使用当前列和行索引调用方法getTableCellEditor()
,并且您将根据条件提供具有适当格式的组件.. < / p>
这样的事情:
public Component getTableCellEditorComponent(JTable table,
Object value,
boolean isSelected,
int row,
int column)
{
Object data = table.getValueAt(row, CONDITION_COLUMN);
if (data is something)
this.setFormat(FORMAT1);
else
this.setFormat(FORMAT2);
return this;
}
答案 1 :(得分:2)
你可以通过创建另一个TableCellEditor来解决它,它将委托给它的两个分包商中的任何一个:当前单元格编辑器的实例。你需要在列中注册这个uber-celleditor,并在Swing使用它时委托它。
答案 2 :(得分:2)
我会覆盖JTable的getCellEditor(...)方法。然后,您可以根据数据格式返回相应的编辑器。