Reputation: 647
I have this code wherein i am inserting string data dynamically to JTable
as Object
type data. I want to align the data inserted to table to centre. Here goes my code
private String[] COLUMNS = {"FAMILY MEMBERS", "STAR (NAKSHATRA)"};
private DefaultTableModel model = new DefaultTableModel(COLUMNS, 0){
public boolean isCellEditable(int row, int column) {
return false;
}
};
private JTable table = new JTable(model);
public void addRow(String memb, String star) {
Object[] row = new Object[2];
row[0]=memb;
row[1]=star;
model.addRow(row);
}
I searched this forum for similar query but in vain. any hint on this will be appreciated.
Upvotes: 0
Views: 4794
Reputation: 205785
This complete example shows how to use a DefaultTableCellRenderer
to effect setHorizontalAlignment(JLabel.CENTER)
. See also this tutorial section on how renderers are selected.
Upvotes: 1
Reputation: 77
// Try this .....
private String[] COLUMNS = {"FAMILY MEMBERS", "STAR (NAKSHATRA)"};
private DefaultTableModel model = new DefaultTableModel(COLUMNS, 0)
{
public boolean isCellEditable(int row, int column)
{
return false;
}
};
private JTable table = new JTable(model);
// To center all columns for string data
DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table.setDefaultRenderer(String.class, centerRenderer);
public void addRow(String memb, String star) {
Object[] row = new Object[2];
row[0]=memb;
row[1]=star;
model.addRow(row);
}
// Also you can use like this..
for(int i=0;i<COLUMNS;i++){
table.getColumnModel().getColumn(i).setCellRenderer( centerRenderer );
}
Upvotes: 0
Reputation: 878
Since the values are Strings to begin with, and the default renderer is just going to call .toString
on the objects any way, why not use String[]
instead of Object[]
?
To answer your question, subclass javax.swing.table.DefaultTableCellRenderer
(which subclasses JLabel
) and set the alignment there (setHorizontalTextPosition
). Then assign that renderer to the table, columns, or cells appropriately.
Use a single renderer for multiple cells. Once a value is rendered, the table will reuse it safely.
Upvotes: 0