0

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.

mKorbel
  • 109,525
  • 20
  • 134
  • 319
human
  • 637
  • 4
  • 15
  • 41

3 Answers3

1

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

Community
  • 1
  • 1
trashgod
  • 203,806
  • 29
  • 246
  • 1,045
0

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.

WeaponsGrade
  • 878
  • 5
  • 13
0
  //  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 );
        }
r_tex
  • 77
  • 9