Java com café: JTable - Selecionar todo texto quando editar uma célula

JTable - Selecionar todo texto quando editar uma célula

Olá, hoje vou dar início a uma série de postagens rápidas. Normalmente quando abordo um assunto, sempre procuro introduzir os conceitos e explicar detalhadamente cada passo para realizar o procedimento. Mas como não estou tendo tempo pra fazer estas postagens mais elaboradas, resolvi mudar o estilo e tornar esse blog em algo parecido com um depósito de códigos. Assim mantenho o blog ativo e mantenho uma biblioteca com meus códigos pra quem quiser copiar (as vezes eu mesmo preciso de um código que fiz e não acho). 

Então vamos ao que interessa. 
Quando temos uma célula editável numa JTable e clicamos na mesma para fazer a edição, normalmente temos que selecionar e apagar o valor presente na célula para entrar com outro. Para melhorar isto e já selecionar todo conteúdo da célula quando ela entrar em edição, sobrescrevemos o método changeSelection da JTable conforme abaixo:

tbExemplo = new javax.swing.JTable()
{
    // Selecionar o conteúdo da célula quando editar
    public void changeSelection(int row, int column, boolean toggle, boolean extend)
    {
        super.changeSelection(row, column, toggle, extend);

        if (editCellAt(row, column))
        {
            Component editor = getEditorComponent();
            editor.requestFocusInWindow();

            if (editor instanceof JTextComponent){
                ((JTextComponent) editor).selectAll();          
            }
        }
    }
};

P.S.: Todos códigos foram testados por mim e são funcionais. Qualquer dúvida pergunte nos comentários.

9 comentários:

  1. Marcio, este codigo funciona com DefautTableModel ou AbstractTableModel? Pois não estou conseguindo selecionar a celula. teria um pequeno exemplo, pois realmente fuçando no google não achei nada parecido. Desde já agradeço. Ricardo

    ResponderExcluir
    Respostas
    1. Olá Ricardo! O código funciona com DefaultTableModel. Veja no link abaixo um pequeno exemplo:

      http://pastebin.com/zKwrFzbJ

      Se você quiser me enviar seu código, posso dar uma olhada.

      Excluir
    2. Marcio, Obrigado, Muito Obrigado mesmo. Sou Iniciante, não sou programador, faço porque gosto e quero aprender. Java é complicado mas quando da certo é muito gratificante. Fazem 3 anos que estou tentando desenvolver um sisteminha. Talvez nunca consiga, mas não custa nada tentar. O que é chato são os detalhezinhos que parecem ser simples mas no fundo dão uma tremenda dor de cabeça. Desde já agradeço a sua ajuda. Ricardo

      Excluir
  2. Márcio,

    Toda vez que o usuário percorre a as linhas da tabela a célula é aberta para edição, como contornar isso, para que seja aberta somente com autorização.
    Ex: A tecla F2

    ResponderExcluir
    Respostas
    1. Filipe,
      Segue o link com um exemplo de edição quando pressiona F12:
      http://pastebin.com/vtVfvVWA
      Ps.: Não repare muito, fiz rapidinho aqui no NetBeans...

      Excluir
    2. Deixe tentar esclarecer minha dúvida.

      O método changeSelection acontece antes de uma tecla ser pressionada.

      Como fazer com que o editor da célula selecionada seja aberto e o texto selecionado somente ao pressionar uma determinada tecla e quando der um duplo clique com o mouse.

      Um clique não é permitido abrir nem selecionar a célula.

      Excluir
    3. O método changeSelection acontece (como o próprio nome diz) quando muda a seleção. O segundo exemplo que te dei abre a célula para edição quando pressionar F12 e daí pra abrir com clique duplo é fácil.
      Esse não selecionar com um clique que não faz muito sentido. Imagine que você tem centenas de células, então teria que navegar por todas somente com o teclado?

      Excluir
  3. Cara muito bom! me ajudou bastante parabéns pela iniciativa.

    ResponderExcluir