简体   繁体   English

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

[英]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. 我有这段代码,其中我将字符串数据作为Object类型数据动态插入到JTable中。 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. 任何对此的提示将不胜感激。

This complete example shows how to use a DefaultTableCellRenderer to effect setHorizontalAlignment(JLabel.CENTER) . 这个完整的示例演示如何使用DefaultTableCellRenderer来实现setHorizontalAlignment(JLabel.CENTER) See also this tutorial section on how renderers are selected. 另请参阅本教程部分,了解如何选择渲染器

图片

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[] ? 由于这些值都是以字符串开头的,并且默认渲染器将以任何方式在对象上调用.toString ,为什么不使用String[]而不是Object[]呢?

To answer your question, subclass javax.swing.table.DefaultTableCellRenderer (which subclasses JLabel ) and set the alignment there ( setHorizontalTextPosition ). 要回答您的问题,请子类化javax.swing.table.DefaultTableCellRenderer (子类JLabel )并在那里设置对齐方式( 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. 呈现值后,表将安全地重用它。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM