web-dev-qa-db-fra.com

Aligner les valeurs des cellules dans JTable?

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

23
Venkat

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 .

42
camickr

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.

9
Adrian

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. 

5
Lê Quang Duy

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.

4
Aaron Digulla

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
fabian

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);
        }
    }
0
OmAr

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

0
Itay Maman