JTable 编辑器保留旧值
JTable editor keep old values
好的,我发现 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
构造函数中设置我的编辑器。
我错过了什么?
您应该覆盖 getCellEditorValue 方法
public Object getCellEditorValue() {
return ((JTextField) getComponent()).getText();
}
也不需要用 JTable 初始化 GlobalEditor
好的,这有效:
JTextField ec = (JTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column);
而不是(也 return ec
而不是 editorComponent
):
JTextField ec = (JTextField) editorComponent;
在getTableCellEditorComponent
方法中。
欢迎任何解释!
好的,我发现 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
构造函数中设置我的编辑器。
我错过了什么?
您应该覆盖 getCellEditorValue 方法
public Object getCellEditorValue() {
return ((JTextField) getComponent()).getText();
}
也不需要用 JTable 初始化 GlobalEditor
好的,这有效:
JTextField ec = (JTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column);
而不是(也 return ec
而不是 editorComponent
):
JTextField ec = (JTextField) editorComponent;
在getTableCellEditorComponent
方法中。
欢迎任何解释!