Redimensionar linha jtable, como proceder?

Pessoal, alguém tem algum exemplo de como fazer que a linha da jtalbe seja redimensionada assim que a pessoa for digitando? Atualmente uso DefaultTableModel.

Rafael, bom dia.

Evite usar o DefaultTableModel, e passe a usar o AbstractTableModel, sobre redimensionar as linhas da JTable você pode comparar quantos caracteres a pessoa digitou e aumentar o tamanho utilizando este exemplo .:

JTable.getColumnModel().getColumn(0).setPreferredWidth(10);

como faço para comparar esses caracteres?

Então Rafael, você possui campos de textos(JTextField) ou a pessoa está digitando na própria Linha da JTable?

está digitando na própria linha da jtable

Exite varias formas, a que eu estou pensando é: Pegar o texto da sua coluna, ex.:

String texto = tbPaises.getValueAt(1, 2).toString();

//1 - Número da linha.
//2 - Número da coluna.

char[] toCharArray = texto.toCharArray();
int tamanho = toCharArray.length;

switch(tamanho){

        case: 10
               JTable.getColumnModel().getColumn(0).setPreferredWidth(10);
        break;
       
        case: 20
              JTable.getColumnModel().getColumn(0).setPreferredWidth(50);
        break;
}

Essa seria a minha forma de fazer.

1 curtida

Testei aqui e não deu. deu erro de “Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException”

Posta o seu código, não da pra saber onde acontece esse erro.

Bom, é uma jtalbe, ontem 24 colunas e todas estão nulas. uma pessoa vai fazer um certo preenchimento onde não são poucas caracteres e conforme ele for digitando na celula eu precisava q a coluna se espadice, pois se ela não fizer isso, vai acabar sumindo os caracteres

Então Rafael, o erro acima pode ser por que suas colunas estão nulas. o código que te passei não vai funcionar, você pode deixar a pessoa redefinir o tamanho manualmente arrastando conforme for preciso, para isso basta mudar o modelo de sua JTable e deixar redimensionável.

mas não é possível esse ajuste ser feito com base na quantidade de caracter? conforme for escrevendo, vai aumentando

Não sei se te atenderia bem, mas você pode adicionar a sua JTable um evento do tipo KeyPressed, dentro do evento verificar a quantidade de caracteres. fiz o código aqui em na minha JTable e funcionou.

  private void tbKeyPressed(java.awt.event.KeyEvent evt) {                              
        int qtdCaracteres;
        
        char[] toCharArray = tb.getValueAt(0, 2).toString().toCharArray();
        qtdCaracteres = toCharArray.length;
        
        switch(qtd){
            case 9:
              tb.getColumnModel().getColumn(2).setPreferredWidth(100);
            break;
        }
    }

Lembrando que você terá que fazer diversos cases comparando o tamanho.

vlw mano, mas descobri q pode ser feito com um jtextarea na jtable

1 curtida