J'ai un JTable dans lequel je définis la taille de la colonne comme suit:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(27);
table.getColumnModel().getColumn(1).setPreferredWidth(120);
table.getColumnModel().getColumn(2).setPreferredWidth(100);
table.getColumnModel().getColumn(3).setPreferredWidth(90);
table.getColumnModel().getColumn(4).setPreferredWidth(90);
table.getColumnModel().getColumn(6).setPreferredWidth(120);
table.getColumnModel().getColumn(7).setPreferredWidth(100);
table.getColumnModel().getColumn(8).setPreferredWidth(95);
table.getColumnModel().getColumn(9).setPreferredWidth(40);
table.getColumnModel().getColumn(10).setPreferredWidth(400);
Cela fonctionne bien, mais lorsque la table est agrandie, j'obtiens un espace vide à droite de la dernière colonne. Est-il possible de redimensionner la dernière colonne à la fin de la fenêtre une fois redimensionnée?
J'ai trouvé une AUTO_RESIZE_LAST_COLUMN
propriété dans les documents mais cela ne fonctionne pas.
Edit: JTable
est dans une JScrollPane
sa taille préférée est définie.
Avec
JTable.AUTO_RESIZE_OFF
, le tableau ne changera pas la taille de l'une des colonnes pour vous, il prendra donc votre paramètre préféré. Si votre objectif est d'avoir les colonnes par défaut à votre taille préférée, sauf pour que la dernière colonne remplisse le reste du volet, vous avez la possibilité d'utiliser l'JTable.AUTO_RESIZE_LAST_COLUMN
autoResizeMode, mais il peut être plus efficace lorsqu'il est utilisé avecTableColumn.setMaxWidth()
au lieu de TableColumn. setPreferredWidth () pour tout sauf la dernière colonne.Une fois que vous êtes convaincu que
AUTO_RESIZE_LAST_COLUMN
cela fonctionne, vous pouvez expérimenter une combinaison deTableColumn.setMaxWidth()
etTableColumn.setMinWidth()
la source
JTable.AUTO_RESIZE_LAST_COLUMN
est défini comme "Pendant toutes les opérations de redimensionnement, n'appliquez les ajustements qu'à la dernière colonne" ce qui signifie que vous devez définir le mode de redimensionnement automatique à la fin de votre code , sinon setPreferredWidth () n'affectera rien!Donc, dans votre cas, ce serait la bonne façon:
la source
Utilisez cette méthode
Ou prolongez la
JTable
classe:Puis
la source
En lisant la remarque de Kleopatra (sa deuxième fois, elle a suggéré de jeter un œil à javax.swing.JXTable , et maintenant je suis désolé de ne pas avoir jeté un coup d'œil la première fois :)) Je vous suggère de suivre le lien
J'ai eu cette solution pour le même problème: (mais je vous suggère de suivre le lien ci-dessus) Lors du redimensionnement du tableau, mettez à l'échelle les largeurs de colonne du tableau à la largeur totale du tableau actuel. pour ce faire, j'utilise un tableau global d'entiers pour les largeurs de colonne (relatives)):
J'utilise cette fonction pour définir les largeurs de colonne du tableau:
Lors de la configuration des données que j'appelle:
et en changeant, j'appelle le jeu ComponentListener au parent de la table (dans mon cas le JScrollPane qui est le conteneur de ma table):
notez que la table JTable est également globale:
Et ici, je règle l'auditeur:
la source
sera le comportement de redimensionnement par défaut ! Si cette méthode est appelée quelque part dans votre code APRÈS avoir défini les propriétés de redimensionnement de la colonne, tous vos paramètres seront réinitialisés. Cet effet secondaire peut survenir indirectement. Fe à la suite de la modification du modèle de données lié d'une manière que cette méthode est appelée, une fois les propriétés définies.
la source
Pas besoin de l'option, faites simplement la largeur préférée de la dernière colonne au maximum et cela prendra tout l'espace supplémentaire.
la source
Ce code fonctionne pour moi sans setAutoResizeModes.
la source
Utilisez ce code. Cela a fonctionné pour moi. J'ai envisagé 3 colonnes. Modifiez la valeur de boucle de votre code.
la source