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,107
  • 18
  • 130
  • 305
human
  • 629
  • 3
  • 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
  • 200,320
  • 28
  • 229
  • 974
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
  • 6
  • 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