Problema JInternalFrame e JTable juntas

1 resposta
Jeancarlo_Sartori

Olá!
Alguém sabe uma solução para este problema?
Tenho uma tabela e nela defino o tamanho das colunas de acordo com o tamanho dos dados. Acontece que o cabeçalho da tabela funciona bem quando está num JFrame, mas se perde quando está em um JInternalFrame.
Não consigo entender porque isso acontece.
Segue o código. Substituindo JFrame por JInternalFrame já não funciona.

import java.awt.*;

import javax.swing.*;
import javax.swing.table.*;


public class Class1 extends JFrame{
    private JTable tbl = null;
    private JScrollPane scroll = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,  ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

    public Class1() {
        Object[] cabecalho = new Object[]{"M","MT","CU"};
        Object[][] dados = new Object[][]{{"1","2","3"},{"2","3","4"},{"3","5","4"}};
        
        tbl = new JTable(dados, cabecalho){
                            public boolean isCellEditable(int rowIndex, int attrIndex)
                            {
                                return false;
                            }
                        };
        tbl.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        packColumns(tbl,0);

        scroll.setPreferredSize(new Dimension(150,90));

        scroll.getViewport().add(tbl);


        getContentPane().setLayout(new BorderLayout());

        getContentPane().add(scroll, BorderLayout.CENTER);

    
        setVisible(true);
        setSize(200,200);

        
    }
        
    public void packColumns(JTable table, int margin) {
        for (int c = 0; c < table.getColumnCount(); c++) {
            packColumn(table, c, margin);
        }
    }

    
    /**
     * Ajusta a largura preferida da coluna visível especificada pelo vColIndex.
     * A coluna será larga o bastante para mostrar o cabeçalho da coluna e a
     * célula de maior conteúdo.
     * 
     * @param table
     * @param vColIndex
     * @param margin
     */
    public void packColumn(JTable table, int vColIndex, int margin) {
        DefaultTableColumnModel colModel =
            (DefaultTableColumnModel)table.getColumnModel();
        TableColumn col = colModel.getColumn(vColIndex);
        int width = 0;

        // ObtÈm a largura do cabeÁalho da coluna
        TableCellRenderer renderer = col.getHeaderRenderer();
        if (renderer == null) {
            renderer = table.getTableHeader().getDefaultRenderer();
        }
        
        Component comp =
                renderer.getTableCellRendererComponent(table, col.getHeaderValue(),
                                                       false, false, 0,vColIndex);
                                                       
        width = comp.getPreferredSize().width;

        // ObtÈm a largura maxima da coluna de dados
        for (int r = 0; r < table.getRowCount(); r++) {
            renderer = table.getCellRenderer(r, vColIndex);
            comp = renderer.getTableCellRendererComponent(table, table.getValueAt(r, vColIndex),
                                       false, false, r, vColIndex);

            width = Math.max(width, comp.getPreferredSize().width);
        }

        //width += 2 * margin;

        // Configura a largura
        col.setPreferredWidth(width);
    }
    
    public static void main (String[] args){
        new Class1();
    }
}

1 Resposta

Jeancarlo_Sartori

Alguém conseguiu simular o erro? Alguma idéia do que pode ser?

Criado 5 de outubro de 2007
Ultima resposta 8 de out. de 2007
Respostas 1
Participantes 1