J'ai créé un jTable
avec 0 lignes et 0 colonnes puisque le contenu, y compris les noms d'en-tête, va être ajouté dynamiquement en fonction des boutons. J'utilise un TableCellrenderer
pour redimensionner les colonnes. Dans mon code, toutes les colonnes s'arrangent uniquement en fonction des valeurs d'en-tête et, de plus, si la somme de toutes les largeurs de colonnes est inférieure à celle de la largeur jTable
, elle doit couvrir toute la table. Je ne sais pas comment faire cela et quel est le problème dans mon code. Merci à l'avanceComment redimensionner jTable pour s'adapter à leur contenu, y compris son en-tête?
public void tableresize(JTable table)
{
for(int i=0;i<table.getColumnCount();i++)
{
DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel();
TableColumn col = colModel.getColumn(i);
int width = 0;
TableCellRenderer renderer = col.getHeaderRenderer();
if (renderer == null)
{
renderer = table.getTableHeader().getDefaultRenderer();
}
Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, false, 0, i);
if(table.getRowCount()>0)
{
for(int r=0;r<table.getRowCount();r++)
{
renderer=table.getCellRenderer(r,i);
Component comp1=renderer.getTableCellRendererComponent(table,table.getValueAt(r, i),false,false, r, i);
if(comp.getPreferredSize().width<comp1.getPreferredSize().width)
{
width=comp1.getPreferredSize().width;
}
else
{
width=comp.getPreferredSize().width;
}
}
}
else
{
width=comp.getPreferredSize().width;
}
col.setPreferredWidth(width+4);
}
}
Merci pour votre aide. Ça marche. Mais si la somme de toutes mes colonnes est inférieure à la largeur totale, toutes les colonnes sont disposées d'un côté (les colonnes ne couvrent pas entièrement la table) – Previn
@previn, je ne l'ai jamais essayé, mais vous pourriez peut-être combiner au-dessus de la classe avec la suggestion dans cette publication: https://stackoverflow.com/questions/15234691/enabling-auto-resize-of-jtable-only-if-it-fit-viewport/15240806#15240806 – camickr
J'ai eu la solution avec au-dessus de la classe en utilisant des conditions supplémentaires. Si la largeur totale est trop faible, j'autorise AUTO_RESIZE_ALL_COLUMNS .. Fonctionne plutôt bien. Merci – Previn