[RESOLVIDO] Alterar função de edição da JTable de Um Clique para Dois Cliques

1 resposta
L

Olá a todos, a minha dúvida é simples, eu tenho uma JTable e todas as colunas são editaveis, quando eu clico uma vez na celula da JTable eu tenho a possibilidade de editar ela. O que eu preciso fazer é o seguinte, preciso que com um clique, a linha seja apenas selecionada, e só libere a edição da celula quando o usuário dar dois cliques no mouse.

Eu tentei bolar uma lógica transformando todas as colunas em não editáveis, ou seja, por padrão um clique do mouse seria apenas para seleção da linha da JTable, e ai com dois cliques, eu poderia liberar a edição da coluna e linha que foram clicadas, segue abaixo o que fiz até o momento

public void mouseClicked(MouseEvent e) {
                int coluna = jTable1.columnAtPoint(e.getPoint());
                int row = jTable1.rowAtPoint(e.getPoint());
                jTable1.setColumnSelectionInterval(coluna, coluna);
                jTable1.setRowSelectionInterval(row, row);
                if (e.getClickCount() >= 2) {

                   "Aqui ele deve liberar a coluna e a linha selecionada para edição"
                }

               
            }
        });

1 Resposta

L

Que bom que eu não precisei da ajuda de ningúem, encontrei a solução criando meu próprio CellEditor, para aqueles que possuem o mesmo problema que eu basta criar seu proprio cell editor e sobrescrever o método IsCellEditable

private class MyTableCellEditor extends AbstractCellEditor
            implements TableCellEditor {

    @Override
        public boolean isCellEditable(EventObject e) {
            System.out.println("oi esotu aqui");
            // aqui eu faço um Cast do EventObject para MouseEvent para chamar o método getClickCount()
            MouseEvent m = (MouseEvent) e;
            if (m.getClickCount() >= 2) {
                return true;
            } else {

                return false;
            }
        }

e setar para todas as colunas o mesmo CellEditor ou para todas que desejar, por exemplo no meu caso, só quero que isso aconteça a partir da primeira coluna, então meu for ja começa com 1, ignorando a coluna 0

for (int i = 1; i < jTable1.getColumnCount(); i++) {
            TableColumn col = jTable1.getColumnModel().getColumn(i);
            col.setCellEditor(new MyTableCellEditor());
        }
Criado 14 de dezembro de 2012
Ultima resposta 14 de dez. de 2012
Respostas 1
Participantes 1