Edição controlada de uma seleção de linha na JTable

Eu tenho uma JTable exibindo linhas de um banco de dados SQL. A tabela é relativamente pequena (apenas 4 colunas e até 1000 linhas).

Gostaria de dar ao usuário a oportunidade de editar qualquer célula da tabela, mas quero evitar restringi-la tanto, para que eles usem uma caixa de diálogo de edição (isso facilita muito a verificação e validação de erros, mas é menos intuitivo)

Tentei algumas maneiras diferentes de controlar as seleções de edição usando o método valueChanged da minha JTable, mas não tive muita sort

Gostaria que cada linha fosse editada e gravada no banco de dados ao final da edição. Gostaria que, uma vez que uma célula tenha sido clicada para iniciar a edição dessa linha, nenhuma outra linha possa ser selecionada até que o usuário termine de editar a linha (outras linhas estarão acinzentadas). Após editar cada célula e pressionar Enter, a seleção de edição deve pular para a próxima coluna na mesma linh

Alguém pode dar dicas sobre como eu posso conseguir iss

//  Create table with database data
   table = new JTable(new DefaultTableModel(data, columnNames)) {
        public Class getColumnClass(int column) {
            for (int row = 0; row < getRowCount(); row++) {
                Object o = getValueAt(row, column);
                if (o != null){
                    return o.getClass();
                }
            }
            return Object.class;
        }

        @Override
        publ,ic boolean isCellEditable(int row, int col){
            return true; 
        }

        @Override
        public boolean editCellAt(int row, int column) {
            boolean ans = super.editCellAt(row, column);
            if (ans) { 
                Component editor = table.getEditorComponent();
                editor.requestFocusInWindow();
            }
            return ans;
        }

        @Override
        public void valueChanged(ListSelectionEvent source) {
            super.valueChanged(source);
            if (table!=null)
                table.changeSelection(getSelectedRow(), getSelectedColumn()+1, false, false);
        }

    };

Edit - editor de célula personalizado com ponteiro de tabela parece ser um começo

public class ExchangeTableCellEditor  extends AbstractCellEditor implements TableCellEditor {

private JTable table;

JComponent component = new JTextField();

public ExchangeTableCellEditor(JTable table) {
    this.table = table;
}

public boolean stopCellEditing() {
    boolean ans = super.stopCellEditing();
    //now we want to increment the cell count
    table.editCellAt(table.getSelectedRow(), table.getSelectedColumn()+1);
    return ans;
}

@Override
public void cancelCellEditing() {
    //do nothing... must accept cell changes 
}

@Override
public Object getCellEditorValue() {
    return ((JTextField)component).getText();
}

@Override
public Component getTableCellEditorComponent(JTable arg0, Object value,
        boolean arg2, int arg3, int arg4) {
    ((JTextField)component).setText((String)value);
    return component;
}

}

questionAnswers(4)

yourAnswerToTheQuestion