类似于Excel的JTable Cell Editor,在版本开始时有一个空单元格

时间:2011-10-15 20:14:05

标签: java jtable

我正在尝试使用类似于excel的JTable版本:如果我开始编辑单元格,则单元格将变为空以接收新条目。目标是避免用户首先删除现有的单元格内容。

我已经可以通过添加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();
}

然而,编辑器内容保留了以前的值。

有人在编辑期间有线索隐藏单元格的当前值吗?

Optionnaly如果用户实际上没有修改该值,它应该能够恢复以前的单元格内容。

2 个答案:

答案 0 :(得分:4)

开始编辑单元格时,我从未见过电子表格删除数据。

Table Select All Editor显示了不同的方法。

答案 1 :(得分:0)

我是这样做的。首先,我使用事件 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);
    }
} 

一旦我使用键盘进行焦点移动,这会使表的第三列为null。

注意:同一段代码可以放在 MouseClicked 事件中。