如何在Defaulttablemodel JTable中设置数据的对齐方式?

时间:2013-09-30 16:17:34

标签: java swing jtable alignment

我有这个代码,其中我将字符串数据动态插入JTable作为Object类型数据。我想将插入到表格的数据与中心对齐。这是我的代码

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);
           }

我在这个论坛上搜索了类似的查询但是徒劳无功。任何暗示都将受到赞赏。

3 个答案:

答案 0 :(得分:1)

这个完整的example显示了如何使用DefaultTableCellRenderer来影响setHorizontalAlignment(JLabel.CENTER)。另请参阅本教程部分,了解如何选择renderers

image

答案 1 :(得分:0)

由于值是字符串开头,默认渲染器只是以任何方式调用对象上的.toString,为什么不使用String[]而不是Object[]

要回答您的问题,请继承javax.swing.table.DefaultTableCellRenderer(子类JLabel)并在那里设置对齐(setHorizontalTextPosition)。然后将该渲染器适当地分配给表,列或单元格。

对多个单元格使用单个渲染器。呈现值后,表将安全地重用它。

答案 2 :(得分: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 );
        }