Comment centrer une valeur dans la cellule JTable
? J'utilise Netbeans.
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);
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 );
}
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);
Au lieu de JLabel.CENTER
, vous pouvez utiliser SwingConstants.CENTER
.
((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
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!