Java Swing:一个列的多个单元格编辑器
在我的JTable中,有两个可编辑的数字列。这两列的编辑器都扩展了AbstractCellEditor,并使用JFormattedTextField作为编辑组件 问题是输入的格式取决于行中另一列的值。如果满足条件X,分数位数应为Y,否则应为Y+2 我试图重写getTableCellEditor(..)方法,以便每行关联一个TableCellEditor。看见但是,由于我有两个可编辑列,因此每行共享一个TableCellEditor对象会产生一些非常奇怪的结果。我认为这不是一个合适的解决方案 任何关于如何实现这一点的想法都将不胜感激Java Swing:一个列的多个单元格编辑器,java,swing,jtable,Java,Swing,Jtable,在我的JTable中,有两个可编辑的数字列。这两列的编辑器都扩展了AbstractCellEditor,并使用JFormattedTextField作为编辑组件 问题是输入的格式取决于行中另一列的值。如果满足条件X,分数位数应为Y,否则应为Y+2 我试图重写getTableCellEditor(..)方法,以便每行关联一个TableCellEditor。看见但是,由于我有两个可编辑列,因此每行共享一个TableCellEditor对象会产生一些非常奇怪的结果。我认为这不是一个合适的解决方案 任何
谢谢大家! 我认为您不需要每行关联一个TableCellEditor 您只需要一个,它将自己访问其他数据。在getTableCellEditor()中,您可以访问表以及坐标(列、行) 这样,您就可以直接在当前行的所需列中询问表的值 请记住,与渲染器一样,单元编辑器也是“共享”的。您确实要求同一个对象向您提供编辑器组件(例如,
TableCellEditor
本身扩展了JFormattedTextField
)。因此,您不需要每行放置一个,将使用当前列和行索引调用方法getTableCellEditor()
,并且您将根据条件为组件提供适当的格式
大概是这样的:
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;
}
您可以通过创建另一个TableCellEditor来解决此问题,该编辑器将委托给它的两个分包商之一:当前单元格编辑器的实例。您需要向列注册此uber celleditor,并让它在Swing使用时进行委托。我将重写JTable的getCellEditor(…)方法。然后,您可以根据数据的格式返回相应的编辑器。Itay-谢谢。这是我使用的方法,效果很好。