有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 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构造函数中设置我的编辑器

我错过了什么


共 (2) 个答案

  1. # 1 楼答案

    您应该重写getCellEditorValue方法

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

    也不需要用JTable初始化GlobalEditor

  2. # 2 楼答案

    好吧,这起作用了:

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

    而不是(也返回ec而不是editorComponent):

    JTextField ec = (JTextField) editorComponent;
    

    getTableCellEditorComponent方法中

    欢迎任何解释