JTable - colunas com a largura do conteúdo

10 respostas
mauber

Olá,

Estou desenvolvendo uma aplicação que possui um grid (JTable) com várias colunas e para utilizar o espaço de uma melhor maneira, gostaria de iniciar o JTable com a largura das colunas do tamanho do conteúdo delas.
Alguém sabe por onde devo começar, o que devo pesquisar??

Obrigado!

10 Respostas

java_Regi

Olá,
cara… poe o leyout = null
setLayout(null);

dai adicionas os campos com SEUCAMPO.setBounds(x, y, x, y )

x e y é plano carteziano…

tenta ai …
talvez vc consiga…

java_Regi

foi mal,

postei no errado…
malz.

desculpas !

mauber

Isto não funcionou!

Eu tenho um DefaultTableModel definido para o JTable.

getAndSet
rissato

Pra dimensionar automaticamente em função do tamanho do maior valor de cada coluna, você pode medir o valor das células usando a classe FontMetrics. Fiz isso uma vez para posicionar componentes na tela. Deve funcionar tb pra redimensionar as colunas.

Klark

Ola, tente isso

public void packColumn(JTable tabela, int coluna, int margin) {
      TableModel model                       = tabela.getModel();  
      DefaultTableColumnModel colModel       = (DefaultTableColumnModel)tabela.getColumnModel();
      TableColumn col                        = colModel.getColumn(coluna);
      int width                              = 0;    
         // Obtém a largura do cabeçalho da coluna
         TableCellRenderer renderer = col.getHeaderRenderer();
         if (renderer == null) {
            renderer = tabela.getTableHeader().getDefaultRenderer();
         }
         Component comp = renderer.getTableCellRendererComponent(tabela, col.getHeaderValue(), false, false, 0, 0);
         width = comp.getPreferredSize().width;
         // Obtém a largura maxima da coluna de dados
         for (int r=0; r<tabela.getRowCount(); r++) {
            renderer = tabela.getCellRenderer(r, coluna);
            comp = renderer.getTableCellRendererComponent(tabela, tabela.getValueAt(r, coluna), false, false, r, coluna);
            width = Math.max(width, comp.getPreferredSize().width);
         }    
         width += 2*margin;
         // Configura a largura
         col.setPreferredWidth(width);
   }
ricardo13

olá pessoal,

copiei este código e não funcionou…tenho campos maiores outros menores…mas ficassem com o tamanho do maior conteudo da coluna.
e tb naum entendi oq seria akele parametro margin.

Alguém poderia ajudar ??

Ricardo

wamarra

Tente o seguinte:

No getColumn(0) eu acessei a 1ª coluna, caso queira outra é só alterá-la para a coluna desejada
No setPreferredWidth(60) vc vai testando para saber qual o tamanho correto para sua coluna, se é 60, 70, 80…
Abraços

B

Cara eu dimensiono desta forma tbm:

jTableTeste.setModel(modelo); jTableTeste.setRowHeight(50); //altera a altura da linha jTableTeste.getColumn("Código").setPreferredWidth(50); //altera o comprimento da coluna jTableTeste.getColumn("Nome").setPreferredWidth(140); jTableTeste.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); doLayout();

flw []'s

raikk0n3n

E fiz assim

TabelaClie.getColumnModel().getColumn(0).setMinWidth(50);
         TabelaClie.getColumnModel().getColumn(0).setMaxWidth(50);
Criado 29 de novembro de 2006
Ultima resposta 1 de dez. de 2006
Respostas 10
Participantes 9