我正在尝试让 JTable 版本像 Excel 中一样工作:如果我开始编辑单元格,该单元格将变为空以接收新条目。目标是避免用户必须先删除现有的单元格内容。
我已经可以通过添加 PropertyChangeListener 来检测单元格的启动/停止版本,如下所示:
public void propertyChange(PropertyChangeEvent e)
{
// A cell has started/stopped editing
if ("tableCellEditor".equals(e.getPropertyName()))
{
if (table.isEditing())
processEditingStarted();
else
processEditingStopped();
}
}
尝试在 processEditingStarted() 中清除表模型不适用于以下代码:
private void processEditingStarted()
{
SwingUtilities.invokeLater( this );
}
public void run()
{
row = table.convertRowIndexToModel( table.getEditingRow() );
column = table.convertColumnIndexToModel( table.getEditingColumn() );
oldValue = table.getModel().getValueAt(row, column);
newValue = null;
table.getModel().setValueAt(null, row, column);
table.updateUI();
}
但是编辑内容保持原来的值。
有人有线索可以在编辑过程中隐藏单元格的当前值吗?
如果用户没有实际修改该值,它应该能够恢复以前的单元格内容。
我从未见过电子表格在您开始编辑单元格时删除数据。
表全选编辑器展示了一种不同的方法。
我就是这样做的。首先,我使用事件 keyReleased ,然后获取我正在处理的行号和列号,然后设置该行的值。代码是这样的。
private void purchases_TBLKeyReleased(java.awt.event.KeyEvent evt) {
int rowWorking = purchases_TBL.getSelectedRow();
int columnWorking = purchases_TBL.getSelectedColumn();
if(columnWorking==3){
model.setValueAt(null, rowWorking, columnWorking);
}
}
当我使用键盘将焦点转移到该列时,这会使表的第三列为空。
注意:同一段代码可以放在MouseClicked事件中。
我添加了这样的 KeyPressed 事件
private void tablaKeyPressed(java.awt.event.KeyEvent e) {
if(e.getKeyChar() != KeyEvent.CHAR_UNDEFINED) {
int row = tabla.getSelectedRow();
if(tabla.getValueAt(row, 0) != "" && tabla.isEditing() == false) {
tabla.setValueAt("", row, 0);
}
}
}