web-dev-qa-db-fra.com

Comment centrer dans une cellule JTable une valeur?

Comment centrer une valeur dans la cellule JTable? J'utilise Netbeans.

27
Daniel Pereira

Vous devez personnaliser le rendu. Pour centrer la première colonne, vous pouvez faire:

DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table.getColumnModel().getColumn(0).setCellRenderer( centerRenderer );

Pour centrer toutes les colonnes avec des données String, vous pouvez:

DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table.setDefaultRenderer(String.class, centerRenderer);
53
camickr

Une autre bonne façon de centrer toutes les colonnes est avec une boucle:

 for(int x=0;x<numberofcols;x++){
         table1.getColumnModel().getColumn(x).setCellRenderer( centerRenderer );
        }
7
Fernando Mendoza

Voici:

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableModel;

public class JTableUtilities
{
    public static void setCellsAlignment(JTable table, int alignment)
    {
        DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
        rightRenderer.setHorizontalAlignment(alignment);

        TableModel tableModel = table.getModel();

        for (int columnIndex = 0; columnIndex < tableModel.getColumnCount(); columnIndex++)
        {
            table.getColumnModel().getColumn(columnIndex).setCellRenderer(rightRenderer);
        }
    }
}

Usage:

JTableUtilities.setCellsAlignment(table, SwingConstants.CENTER);
4
BullyWiiPlaza

Au lieu de JLabel.CENTER, vous pouvez utiliser SwingConstants.CENTER.

2
leejsmith1991
((DefaultTableCellRenderer) jTable1.getTableHeader().getDefaultRenderer())
            .setHorizontalAlignment(JLabel.CENTER); // header to center

Ce centre d'en-tête de code jtable

DefaultTableCellRenderer rendar = new DefaultTableCellRenderer();
    rendar.setHorizontalAlignment(jLabel1.CENTER);

    jTable1.getColumnModel().getColumn(0).setCellRenderer(rendar); 

ce code au centre de la colonne

1
Shinwar ismail

J'avais un problème similaire. Je voulais aligner une seule cellule en fonction de la valeur d'une autre cellule. Si la cellule X était NULL, la cellule Y doit être alignée à DROITE. Sinon, la cellule Y doit être alignée à GAUCHE.

J'ai trouvé cette solution vraiment utile. Il consiste à créer un rendu personnalisé, en étendant DefaultTableCellRender.

Voici le code:

public class MyRender extends DefaultTableCellRenderer{

@Override
 public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column){
    super.getTableCellRendererComponent (table, value, isSelected, hasFocus, row, column);
    MyTableModel mtm = (MyTableModel)table.getModel();
    switch(column){
        case Y : 
            if(mla.getValueAt(row,X)!=null)
                setHorizontalAlignment(SwingConstants.RIGHT);
            else
                setHorizontalAlignment(SwingConstants.LEFT);
            break;
     }
    return this;
   }

 }

Après cela, créez simplement une nouvelle instance de MyRender et définissez-la sur la colonne Y, dans ce cas. Je le fais lorsque je charge les informations sur la table.

MyRender render = new MyRender();
table.getColumnModel().getColumn(Y).setCellRender(render);

J'espère que c'est utile!

1
jUNT