【问题标题】:JTable editor keep old valuesJTable 编辑器保留旧值
【发布时间】:2016-03-11 05:13:30
【问题描述】:

好的,我注意到JTable 的编辑器有问题。场景如下所示:

  • 我编辑了一个单元格并输入了一个有效值,假设我输入了 42
  • 我双击另一个单元格(可以为空或不为空)
  • 单元格现在包含 42,我可以编辑此值,但当我双击单元格时,42 位于单元格中。

我怀疑我的编辑器,因为当我使用DefaultCellEditor 时没有问题。这是它的声明:

public class GlobalEditor extends DefaultCellEditor {
public GlobalEditor(JTable table, JTextField jtf) {
    super(jtf);
    /*
     * Setting font, background/foreground color, center alignement
     */
}

public boolean stopCellEditing() {
    String value = ((JTextField) getComponent()).getText();
    if (!value.equals("")) {
        if (value.length() > 10) {
            ((JComponent) getComponent()).setBorder(new LineBorder(Color.red));
            return false;
        }
    }
    return super.stopCellEditing();
}

@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    JTextField ec = (JTextField) editorComponent;
    if(value != null && value+"" != "---")
        ec.setText(""+value);
    if (isSelected) {
        ec.selectAll();
    }

    return editorComponent;
}

}

this.setDefaultEditor(Object.class, new GlobalEditor(this, new JTextField())); 这一行将我的编辑器设置在我的JTable 构造函数中。

我错过了什么?

【问题讨论】:

    标签: java swing jtable jtextfield tablecelleditor


    【解决方案1】:

    你应该重写 getCellEditorValue 方法

      public Object getCellEditorValue() {
        return ((JTextField) getComponent()).getText();
      }
    

    也不需要用 JTable 初始化 GlobalEditor

    【讨论】:

    • 现在完成。感谢@Igor 的提示,但这并不能解决问题。
    • 你的编辑是什么意思:“用 JTable 初始化 GlobalEditor”?我没有看到任何 GlobalEditor 父级的构造函数采用 JTable
    • public GlobalEditor(JTextField jtf) { super(jtf); }
    【解决方案2】:

    这行得通:

    JTextField ec = (JTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column);
    

    代替(也返回ec代替editorComponent):

    JTextField ec = (JTextField) editorComponent;
    

    getTableCellEditorComponent 方法中。

    欢迎任何解释

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多