Ajuste de celulas no JTable

Comumente quando damos um duplo-clique na entre-linha do cabeçalho de uma tabela ela se ajsuta da melhor maneira baseando-se no tamanho do maior registro daquela coluna.

a pergunta é:

  • como consigo esse efeito em uma JTable? já existe um método pronto ou preciso implementar essa funcionalidade?

agradeço.

No evento click impremente isso

            //Ajusta largura das colunas
            DefaultTableColumnModel colModel = (DefaultTableColumnModel) jT.getColumnModel();
            DefaultTableCellRenderer dtcr;
            for (int c = 0; c < jT.getColumnCount(); c++) {
                int width = 0;

                // Obtém a largura do cabeçalho da coluna
                TableCellRenderer renderer = colModel.getColumn(c).getHeaderRenderer();
                if (renderer == null) {
                    renderer = jT.getTableHeader().getDefaultRenderer();
                }
                Component comp = renderer.getTableCellRendererComponent(jT, colModel.getColumn(c).getHeaderValue(), false, false, 0, 0);
                width = comp.getPreferredSize().width;

                // Obtém a largura máxima da coluna de dados
                for (int r = 0; r < jT.getRowCount(); r++) {
                    renderer = jT.getCellRenderer(r, c);
                    comp = renderer.getTableCellRendererComponent(jT, jT.getValueAt(r, c), false, false, r, c);
                    width = Math.max(width, comp.getPreferredSize().width);
                    
                    if (r == 1) {
                        //Alinha conteúdo da célula
                         dtcr = new DefaultTableCellRenderer();
                         colModel.getColumn(c).setCellRenderer(ViewDataFormatAlign(((ModeloTabelaPadrao) jT.getModel()).getValueAt(r, c), dtcr));
                    }
                }

                width += 2 * 2;

                // Configura a largura
                colModel.getColumn(c).setPreferredWidth(width);
            }

opa, prsantos, vlw. :smiley:

pós-editado:

mas não ajudou muito :cry:

Quando Conseguir me envie uma cópia.

prsantosbr@gmail.com

segue esse codigo abaixo eu sempre uso ele pra setar os tamanhos das colunas da minha tabela

// largura de cada coluna
  int[] tamCol = new int[2];
  tamCol[0] = 20;
  tamCol[1] = 300;


  //percorre as colunas setando seu tamanho
  for(int i=0; i <= tabela.getColumnCount()-1; i++) {
    javax.swing.table.TableColumn column = tabela.getColumnModel().getColumn(i);
    column.setMinWidth(tamCol[i]);
    column.setPreferredWidth(tamCol[i]);
  }

  // alinhamento
  DefaultTableCellRenderer esquerda = new DefaultTableCellRenderer();
  DefaultTableCellRenderer centralizado = new DefaultTableCellRenderer();
  DefaultTableCellRenderer direita = new DefaultTableCellRenderer();

  esquerda.setHorizontalAlignment(SwingConstants.LEFT);
  centralizado.setHorizontalAlignment(SwingConstants.CENTER);
  direita.setHorizontalAlignment(SwingConstants.RIGHT);

  //tabela.getColumnModel().getColumn(0).setCellRenderer(centralizado);
  //tabela.getColumnModel().getColumn(1).setCellRenderer(esquerda);

alem de setar o tamanho das colunas vc tamebm pode definir como quer q fique o titulo da coluna

ve se funciona ae qualq coisa posta ae

vlw

Valeu Furacão.

Tópico antigo, mas se alguér chegar até aqui, fica a dica.

public void tableColumnAutoSize(JTable table) {
    table.setSelectionMode(JTable.AUTO_RESIZE_OFF);
        
    int[] largestString = new int[table.getColumnCount()];

    FontMetrics fm = table.getFontMetrics(table.getFont());

    // Inicializa todos os campos com tamanho do título da coluna
    for (int i=0;i<largestString.length;i++)
        largestString[i] = fm.stringWidth(table.getColumnModel().getColumn(i).getHeaderValue();

    for (int i=0; i<table.getRowCount(); i++) {
        for (int j=0;j<largestString.length;j++) {
            try {
                Object sourceValue = table.getValueAt(i, j);
                    
                if (sourceValue == null)
                    continue;
                    
                String value = sourceValue.toString();

                int valueSize = fm.stringWidth(value);

                if (valueSize > largestString[j]) {
                    largestString[j] = valueSize;
                }
            } catch (IllegalArgumentException ex) {
                Logger.getLogger(OldStdTableModel.class.getName()).log(Level.SEVERE, null, ex);
                return;
            }
        }
    }

    // Aplica as dimenções encontradas na tabela. Soma 20 pois testes mostraram que o campo sempre fica um pouco menor
    for (int k=0;k<fieldConfig.size();k++)
        table.getColumnModel().getColumn(k).setPreferredWidth(largestString[k] + 20);
        
    table.repaint();
}