human
human

Reputation: 647

How to set the alignment of data in Defaulttablemodel JTable?

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

Answers (3)

trashgod
trashgod

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.

image

Upvotes: 1

r_tex
r_tex

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

WeaponsGrade
WeaponsGrade

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

Related Questions