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?
//Ajusta largura das colunasDefaultTableColumnModelcolModel=(DefaultTableColumnModel)jT.getColumnModel();DefaultTableCellRendererdtcr;for(intc=0;c<jT.getColumnCount();c++){intwidth=0;// Obtém a largura do cabeçalho da colunaTableCellRendererrenderer=colModel.getColumn(c).getHeaderRenderer();if(renderer==null){renderer=jT.getTableHeader().getDefaultRenderer();}Componentcomp=renderer.getTableCellRendererComponent(jT,colModel.getColumn(c).getHeaderValue(),false,false,0,0);width=comp.getPreferredSize().width;// Obtém a largura máxima da coluna de dadosfor(intr=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éluladtcr=newDefaultTableCellRenderer();colModel.getColumn(c).setCellRenderer(ViewDataFormatAlign(((ModeloTabelaPadrao)jT.getModel()).getValueAt(r,c),dtcr));}}width+=2*2;// Configura a larguracolModel.getColumn(c).setPreferredWidth(width);}
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
P
prsantos
Valeu Furacão.
P
paulo_alonso
Tópico antigo, mas se alguér chegar até aqui, fica a dica.
publicvoidtableColumnAutoSize(JTabletable){table.setSelectionMode(JTable.AUTO_RESIZE_OFF);int[]largestString=newint[table.getColumnCount()];FontMetricsfm=table.getFontMetrics(table.getFont());// Inicializa todos os campos com tamanho do título da colunafor(inti=0;i<largestString.length;i++)largestString[i]=fm.stringWidth(table.getColumnModel().getColumn(i).getHeaderValue();for(inti=0;i<table.getRowCount();i++){for(intj=0;j<largestString.length;j++){try{ObjectsourceValue=table.getValueAt(i,j);if(sourceValue==null)continue;Stringvalue=sourceValue.toString();intvalueSize=fm.stringWidth(value);if(valueSize>largestString[j]){largestString[j]=valueSize;}}catch(IllegalArgumentExceptionex){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 menorfor(intk=0;k<fieldConfig.size();k++)table.getColumnModel().getColumn(k).setPreferredWidth(largestString[k]+20);table.repaint();}