Je ne sais pas comment aligner les valeurs des cellules dans JTable.
Pour Ex, The Jtable montre, Nom Salaire M.X 100000.50 XXXX 234.34 AAAA 1205.50
Je veux aligner les "Salaires" dans le format suivant.
Name Salary
Mr.X 100000.50
XXXX 234.34
YYYy 1205.50
Comment aligner comme ci-dessus la JTable
Il n'est pas nécessaire de créer une classe personnalisée pour cela, utilisez simplement le rendu par défaut:
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(SwingConstants.RIGHT);
table.getColumnModel().getColumn(???).setCellRenderer(rightRenderer);
Sinon, une meilleure approche consiste à stocker les valeurs Double dans la table. Un rendu numérique approprié sera utilisé et les rendus numériques seront automatiquement alignés à droite. Vous pouvez ensuite personnaliser la mise en forme du nombre à l'aide de Tableau Format Renderer .
Nous devons faire une petite correction, la bonne façon est DefaultTableCellRenderer.RIGHT
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(DefaultTableCellRenderer.RIGHT);
tableExample.getColumn("Price").setCellRenderer( rightRenderer );
Remarquez la différence avec la réponse initiale de camickr, "Price" est le nom de la colonne, à modifier selon le cas.
Une méthode simple consiste à utiliser DefaultTableModel et à remplacer la méthode getColumnClass ()
Ex:
DefaultTableModel model = new DefaultTableModel() {
@Override
public Class getColumnClass(int columnIndex) {
if (columnIndex == 0) {
return Integer.class;
} else {
return String.class;
}
}
};
Si vous renvoyez Integer, votre colonne s'alignera à droite et anh si return String, votre colonne s'alignera à gauche.
De cet article du forum :
Créez une classe qui étend DefaultTableCellRenderer
et implémentez la méthode getTableCellRendererComponent()
, quelque chose comme:
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
JLabel renderedLabel = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
renderedLabel.setHorizontalAlignment(SwingConstant s.RIGHT);
return renderedLabel;
}
et installez ce moteur de rendu pour la colonne en question.
Maintenant, il vous suffit de vous assurer que chaque valeur a le même nombre de décimales car pour la plupart des polices, tous les chiffres ont la même largeur.
J'ai une méthode qui aligne une colonne dans un tableau à droite:
private void alignRight(JTable table, int column) {
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
table.getColumnModel().getColumn(column).setCellRenderer(rightRenderer);
}
comme pour plus d’une table à la fois, j’ai réussi à le faire ... c’est comme @camickr mais j’ai ajouté les en-têtes
DefaultTableCellRenderer rightRenderer_c = new DefaultTableCellRenderer();
DefaultTableCellRenderer rightRenderer_h = new DefaultTableCellRenderer();
rightRenderer_c.setHorizontalAlignment( javax.swing.JLabel.RIGHT );
for(JTable t : Tables){ //Tables is an ArrayList<JTable>
//for the headers :
rightRenderer_h = (DefaultTableCellRenderer) t.getTableHeader().getDefaultRenderer();
rightRenderer_h.setHorizontalAlignment( javax.swing.JLabel.RIGHT );
//for cells :
for(int i=0; i < t.getColumnCount(); i++){
t.getColumnModel().getColumn(i).setCellRenderer(rightRenderer_c);
}
}
Pour ce faire, vous devez spécifier un rendu personnalisé cell pour chaque colonne. Chaque rendu formatera les données différemment (les noms seront alignés à gauche, les décimales à droite, ...)