Aligner les valeurs des cellules dans JTable?
Je ne sais pas comment aligner les valeurs des cellules dans JTable.
Pour les anciens,La Jtable montre, Nom De Salaire M. X 100000.50 XXXX 234,34 YYYy 1205.50
je veux aligner les "Salaires" dans le format suivant.
Name Salary
Mr.X 100000.50
XXXX 234.34
YYYy 1205.50
comment s'aligner comme au-dessus du JTable
7 réponses
il n'est pas nécessaire de créer une classe personnalisée pour cela, il suffit d'utiliser le renderer par défaut:
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(SwingConstants.RIGHT);
table.getColumnModel().getColumn(???).setCellRenderer(rightRenderer);
ou une meilleure approche est de réellement stocker des valeurs doubles dans la table et puis un renderer numérique approprié sera utilisé et les renderers de nombre sont automatiquement alignés à droite. Vous pouvez alors personnaliser le formatage du nombre en utilisant un Format De Table Renderer.
Nous avons besoin de faire une petite correction, le droit chemin est DefaultTableCellRenderer.DROIT
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(DefaultTableCellRenderer.RIGHT);
tableExample.getColumn("Price").setCellRenderer( rightRenderer );
noter la différence avec la réponse originale de camickr, "prix" est le nom de la colonne, changer selon le cas.
Créer une classe qui étend la classe DefaultTableCellRenderer
et de mettre en œuvre l' getTableCellRendererComponent()
méthode, 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 renderer pour la colonne en question.
Maintenant, vous devez seulement 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.
une manière simple est d'utiliser Defaulttablmodel et la méthode override getColumnClass ()
Ex:
DefaultTableModel model = new DefaultTableModel() {
@Override
public Class getColumnClass(int columnIndex) {
if (columnIndex == 0) {
return Integer.class;
} else {
return String.class;
}
}
};
si vous retournez entier, votre colonne s'alignera à droite et si vous retournez Chaîne, votre colonne s'alignera à gauche.
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);
}
la façon de procéder est de spécifier une coutume rendu de cellule pour chaque colonne. Chaque rendus formatera les données différemment (les noms seront alignés à gauche, les décimales à droite)...)
pour plus d'une table à la fois, j'ai réussi à le faire ... c'est comme @camickr posté mais j'ai ajouté les en-têtes aussi
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);
}
}