代码之家  ›  专栏  ›  技术社区  ›  Luhar

一列的多个单元格编辑器

  •  2
  • Luhar  · 技术社区  · 16 年前

    在jtable中,我有两个可编辑的数字列。这两列的编辑器都扩展了AbstractCellEditor,并使用JFormatedTextField作为编辑组件。

    问题是输入的格式取决于行中另一列的值。如果满足条件x,则分数位数应为y,否则应为y+2。

    我试图重写GetTableCellEditor(..)方法,以便每行关联一个TableCellEditor。见 this example . 但是,由于我有两个可编辑列,每行共享一个TableCellEditor对象会产生一些非常奇怪的结果。我认为这不是一个合适的解决方案。

    关于如何处理这一问题的任何想法都将不胜感激!

    谢谢您!

    3 回复  |  直到 16 年前
        1
  •  2
  •   Itay Maman    16 年前

    您可以通过创建另一个TableCellEditor来解决这个问题,它将委托给它的两个分包商之一:当前单元格编辑器的实例。您需要将这个uber celleditor注册到该列中,并让它在Swing使用该列时进行委托。

        2
  •  3
  •   Gnoupi    16 年前

    我认为您不需要为每行关联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;
    }
    
        3
  •  2
  •   camickr    16 年前

    我将重写jtable的getcelleditor(…)方法。然后,您可以根据数据的格式返回适当的编辑器。