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

23
demandé sur Venkat 2010-03-09 14:13:22

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.

42
répondu camickr 2014-05-07 12:03:09

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.

8
répondu Adrian 2014-05-07 12:02:41

ce post sur le forum:

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.

4
répondu Aaron Digulla 2010-03-09 11:18:58

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.

4
répondu Lê Quang Duy 2013-07-31 09:41:30

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);
}
3
répondu fabian 2012-12-19 22:54:17

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)...)

0
répondu Itay Maman 2010-03-09 11:18:09

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);
        }
    }
0
répondu OmAr 2014-02-25 03:29:08