如何一次对齐所有jtable单元格和标题?

时间:2013-11-24 13:54:15

标签: java swing alignment performance jtableheader

是否有 - > 效率 < - 一次将所有内容置于中心

我不介意它是在初始化部分还是之后,都欢迎。

到目前为止我的代码:

jTable2 = new javax.swing.JTable();

jTable2.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
    },
    new String [] {
        "header1", "header2", "header3"
    }
)); 

我设法将标题集中在一起,但是一切都是一切都是错误的:S

DefaultTableCellRenderer renderer;
renderer = (DefaultTableCellRenderer)
            jTable2.getTableHeader().getDefaultRenderer();
renderer.setHorizontalAlignment(JLabel.CENTER);

2 个答案:

答案 0 :(得分:1)

我想你可以从这个问题中得到参考:java - How to center in JTable cell a value? - Stack Overflow
第二个答案中心所有带循环的列始终适合我。

P.S。就像@camickr提到的那样,第二个答案可能会导致自定义渲染的丢失。

根据How to Use Tables,如果我们使用下面的构造函数。

  • JTable(Object [] [] rowData,Object [] columnNames)
  • JTable(Vector rowData,Vector columnNames)

然后他们会将所有数据类型视为字符串。在这种情况下,第二个答案将运作良好。

但是如果用户覆盖了AbstractTableModel(see here TableDemo.java)中的getColumnClass(int c)函数,那么第二个答案将导致默认渲染器丢失:默认渲染将打印布尔类型作为复选框,使用后第二个答案,表格将打印“true”/“false”。

因此,如果您想使用默认渲染并同时居中单元格。这个答案将帮助你:
java - Overriding JTable's DefaultTableCellRenderer to center all the cells in a JTable - Stack Overflow

答案 1 :(得分:0)

它可能是一个有点旧的帖子,但是对于那些正在搜索同样问题的人来说。

这使得很多桌子很容易一次对齐(我对这些东西很懒,所以我一直在寻找并尝试最简单的方法:P)。

    ArrayList<JTable> Tables = new ArrayList(); //JTable or javax.swing.JTable ... as it confused me as a beginner in Java codding

    Tables.add(jTable1);
    Tables.add(jTable2);
        //.........
        //.........

    DefaultTableCellRenderer centerRenderer_c = new DefaultTableCellRenderer();
    DefaultTableCellRenderer centerRenderer_h = new DefaultTableCellRenderer();
    centerRenderer_c.setHorizontalAlignment( javax.swing.JLabel.CENTER );

    for(JTable t : Tables){
        t.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);// this will reverse the headers visually 

        //for the headers :
        centerRenderer_h = (DefaultTableCellRenderer)t.getTableHeader().getDefaultRenderer();
        centerRenderer_h.setHorizontalAlignment( javax.swing.JLabel.CENTER );

        //for cells :
        for(int i=0; i < t.getColumnCount(); i++){
            t.getColumnModel().getColumn(i).setCellRenderer(centerRenderer_c);
        }
    }