不保留单元格的值
发布了 CellEditor。
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableCellEditor;
public class UserCellEditor extends AbstractCellEditor
implements TableCellEditor {
JComponent component = new JTextField();
public Object getCellEditorValue() {
return ((JTextField) component).getText();
}
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
((JTextField) component).setText((String) value);
return component;
}
}
然后我以这样的方式调用表格方法:
UserTable.getColumnModel().getColumn(0).setCellEditor(new UserCellEditor());
单元格正在编辑,但是按Enter
键或移动到另一个单元格的结果不被存储,它返回原始值。
我哪里错了或者我做错了什么?
Posted CellEditor.
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableCellEditor;
public class UserCellEditor extends AbstractCellEditor
implements TableCellEditor {
JComponent component = new JTextField();
public Object getCellEditorValue() {
return ((JTextField) component).getText();
}
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
((JTextField) component).setText((String) value);
return component;
}
}
Then I call table method in such way:
UserTable.getColumnModel().getColumn(0).setCellEditor(new UserCellEditor());
The cell is being edited, but the result by pressing the Enter
key or move to another cell is not stored, it returns the original value.
Where am I wrong or what I'm doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
看起来您正在本地
JTextField
中编辑值,而您的数据模型随后在编辑完成后返回未更改的值。您的编辑器需要更新您的模型,按照此示例中的建议。It looks like you are editing the value in a local
JTextField
, while your data model is subsequently returning the unchanged value when editing is complete. Your editor needs to update your model, as suggested in this example.如果您要为列设置
CustomTableCellEditor
,则必须在相应 TableModel 的setValueAt(Object o, int row, int column)
中更新该列(如果您不这样做)不要这样做,新值永远不会更新。顺便说一句,如果您这样定义CustomTableCellEditor
:public class CustomTableCellEditor extends AbstractCellEditor Implements TableCellEditor
您将不需要自己触发事件。
If you are setting a
CustomTableCellEditor
for a column, that column must be updated in thesetValueAt(Object o, int row, int column)
of the corresponding TableModel, if you don't do that the new value is never updated. By the way if you define yourCustomTableCellEditor
this way:public class CustomTableCellEditor extends AbstractCellEditor implements TableCellEditor
You won't need to fire events by yourself.