Martin Pernollet
Martin Pernollet

Reputation: 2315

Excel-like JTable Cell Editor, with an empty cell at edition start

I'm trying to have a JTable edition working like in excel: if I start editing a cell, the cell becomes empty for receiving the new entry. The goal is to avoid the user having to delete the existing cell content first.

I can already detect cell start/stop edition by adding a PropertyChangeListener working as follow:

public void propertyChange(PropertyChangeEvent e)
{
    //  A cell has started/stopped editing
    if ("tableCellEditor".equals(e.getPropertyName()))
    {
        if (table.isEditing())
            processEditingStarted();
        else
            processEditingStopped();
    }
}

Trying to clear the table model at processEditingStarted() does not work with the code bellow:

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

However the editor content keeps the former value.

Does someone has clues to hide the current value of the cell during edition?

Optionnaly it should be able to restore the former cell content if the user did not actually modify the value.

Upvotes: 2

Views: 3263

Answers (3)

lucca urso
lucca urso

Reputation: 1

I made it by adding a KeyPressed event like this

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

Upvotes: 0

Pawan
Pawan

Reputation: 443

I did it like this. First I am using the event keyReleased and then getting the row and column number on which I am working and then setting the value at that row. Code goes like this.

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

This makes the third column of the table null as soon as I focus move on to that using keyboard.

Note: The same piece of code can be placed in MouseClicked event.

Upvotes: 0

camickr
camickr

Reputation: 324167

I"ve never seen a spreadsheet remove data when you start editing a cell.

Table Select All Editor shows a different approach.

Upvotes: 4

Related Questions