Ref.: JTable Padrão

Boa tarde a todos.

          Estou tentando criar um JTable padrão, já começei, porém agora pretendo formatar a largura de cada coluna em virtude do tamanho de seu cabeçalho ou de seu conteúdo , se o tamanho do cabeçalho for menor que o de seu conteudo, prevalecerá o tamanho do conteúdo e, vice-versa.

          Alguém sabe como posso fazer isso?

          Estou usando NetBenas 5.5.1

          Me respondam uma coisa por favor:

          Posso criar modelos de Tabela, Coluna, Linha, Cabeçalho e o que mais, Para uma JTable!?


          Desde Já agradeço.


          Seguem abaixo minha ídeia de Popular uma JTable passando como parâmetro um ResultSet.
    protected static JTable PreencheJTable(JTable jT, ResultSet rs) {
        DecimalFormat df = new DecimalFormat();
        SimpleDateFormat sdf = new SimpleDateFormat();
        
        try {
            ResultSetMetaData rsmd = rs.getMetaData();
            
            //Adiciona cabeçalho das colunas
            Vector cols = new Vector();
            for (int i = 1; i <= rsmd.getColumnCount(); ++i) {
                Vector conteudoCols = new Vector();
                
                conteudoCols.addElement(rsmd.getColumnName(i));
                conteudoCols.addElement(rsmd.getColumnType(i));
                conteudoCols.addElement(rsmd.getColumnTypeName(i));
                conteudoCols.addElement(rsmd.getColumnDisplaySize(i));
                
                cols.addElement(conteudoCols);
            }
            
            //Adiciona registro a JTable
            Vector lins = new Vector();
            //if (rs.isBeforeFirst()) {
            while (rs.next()) {
                Vector regs = new Vector();
                Object obj = new Object();
                for (int i = 1; i <= rsmd.getColumnCount(); ++i) {
                    obj = rs.getObject(rs.getMetaData().getColumnName(i));
                    
                    if (obj == null) {
                        obj = new String("");
                    } else {
                        System.out.println(obj.getClass().getName());
                    }
                    
                    //Formata campo
                    if (obj.getClass().getSimpleName().equals("Integer")) {
                        df.applyPattern("000000");
                        regs.addElement(df.format(obj));
                    } else if (obj.getClass().getSimpleName().equals("String")) {
                        regs.addElement(obj);
                    } else if (obj.getClass().getSimpleName().equals("Timestamp")) {
                        sdf.applyPattern("dd/MM/yyyy");
                        regs.addElement(sdf.format(obj));
                    } else if (obj.getClass().getSimpleName().equals("Boolean")) {
                        if ((Boolean) obj) {
                            regs.addElement("True");
                        } else {
                            regs.addElement("False");
                        }
                    } else if (obj.getClass().getSimpleName().equals("BigDecimal")) {
                        df.applyPattern("###,###,##0.00");
                        regs.addElement(df.format(obj));
                    } else {
                        System.out.println("Tipo foi:" + obj.getClass().getSimpleName());
                    }
                }
                
                //Adiciona registro fisicamente
                lins.addElement(regs);
            }
            //}
            
            //Configura Tabela
            jT.setModel(new ModeloTabela(lins, cols));
//            jT.setColumnModel(new ModeloColunaTabela(cols));
            jT.getTableHeader().setDefaultRenderer(CelulaCabecalhoTabela(jT.getTableHeader()));
            jT.setDefaultRenderer(Object.class, new CelulaTabela());
            
//            //Muda as cores da linha da tabela selecionada. 
//            jT.setSelectionForeground(Color.yellow); 
//            jT.setSelectionBackground(Color.red); 
            
//            // Remove as linhas da tabela  
//            jT.setShowHorizontalLines(false); 
//            jT.setRowSelectionAllowed(true); 
//            jT.setColumnSelectionAllowed(true); 
        } catch (SQLException errorSQL) {
            JOptionPane.showMessageDialog(null, errorSQL.getMessage(), "Erro SQL", JOptionPane.ERROR_MESSAGE);
            errorSQL.printStackTrace();
        }
        
        return jT;
    }