类似 Excel 的 JTable 单元格编辑器,在编辑开始时有一个空单元格

问题描述 投票:0回答:3

我正在尝试让 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();
}

但是编辑内容保持原来的值。

有人有线索可以在编辑过程中隐藏单元格的当前值吗?

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

java jtable
3个回答
4
投票

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

表全选编辑器展示了一种不同的方法。


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);
    }
} 

当我使用键盘将焦点转移到该列时,这会使表的第三列为空。

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


0
投票

我添加了这样的 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);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.