Redimensionnement automatique des largeurs de colonne JTable

J’ai besoin de ma JTable pour redimensionner automatiquement ses largeurs de colonne en fonction du contenu. J’ai trouvé la classe TableColumnAdjuster très utile. Mais il y a un petit problème. Disons que j’ai 5 colonnes et leur contenu est très court. Dans ce cas, si j’utilise l’ajusteur automatique, il définit les largeurs des quatre premières colonnes en fonction de leur contenu et donne tout le rest d’espace à la dernière colonne. S’il vous plaît voir l’exemple.

entrer la description de l'image ici

Ici, la dernière colonne, Balance , donne tout l’espace en excès. Mais si je dois donner cet espace à l’une des colonnes du milieu. Dans le cas ci-dessus, je dois atsortingbuer cet espace à la troisième colonne, name . J’ai essayé de modifier la TableColumnAdjuster adjustColumns() la classe adjustColumns() . Mais je ne pouvais pas le faire fonctionner.

J’ai essayé à la fois column.setPreferredWidth() et column.setWidth() pour changer la taille des colonnes. Mais semble que cela ne change rien. Comment puis-je changer efficacement les tailles de colonne d’un JTable . S’il existe une autre solution ou une réponse directe à mon problème principal, c’est mieux. Merci!

Vous pouvez essayer le suivant:

 public void resizeColumnWidth(JTable table) { final TableColumnModel columnModel = table.getColumnModel(); for (int column = 0; column < table.getColumnCount(); column++) { int width = 15; // Min width for (int row = 0; row < table.getRowCount(); row++) { TableCellRenderer renderer = table.getCellRenderer(row, column); Component comp = table.prepareRenderer(renderer, row, column); width = Math.max(comp.getPreferredSize().width +1 , width); } if(width > 300) width=300; columnModel.getColumn(column).setPreferredWidth(width); } } 

JTable

Cela doit être exécuté avant la méthode de redimensionnement.
Si tu as:

 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

JTable

Il n’y a pas d’option pour redimensionner automatiquement une colonne plus grande que l’autre.

Peut-être que vous pouvez faire quelque chose comme:

 tca = new TableColumnAdjuster( table, 0 ); tca.adjustColumns(); TableColumnModel tcm = table.getColumnModel(); TableColumn tc = tcm.getColumn(1); tc.setWidth(tc.getWidth() + 25); 

Cela vous permettrait d’append de l’espace supplémentaire à la colonne 1. Cet espace supplémentaire ne serait ajouté que la première fois que le tableau est affiché.

Une autre option consiste à utiliser:

 table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); 

Cela allouerait de l’espace supplémentaire proportionnellement à chaque colonne.

setAutoResizeMode () indiquera à votre table comment redimensionner. Vous devriez essayer toutes les différentes options disponibles pour voir les différences. Dans Mon cas, je voulais redimensionner spécifiquement deux colonnes et le laisser décider comment ajuster toutes les autres.

 jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN); TableColumnModel colModel=jTable1.getColumnModel(); colModel.getColumn(1).setPreferredWidth(25); colModel.getColumn(2).setPreferredWidth(400); 

Tu peux le faire:

 JPanel jp = new JPanel(); jp.add(table); jp.setLayout(new GridLayout(1,1)); /* little sortingck ;) and believe me that this step is important to the automatic all columns resize! A import is also needed for using GridLayout*/ table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); // this is obvius part