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.
[code]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();
}
}
[/code]