为JTable创建多行标题

时间:2010-02-26 17:09:50

标签: java swing jtable

我在NetBeans中使用JTable GUI组件。

  • 我想创建多行标题

  • 当我为表格标题创建自定义渲染器时,我能够这样做

  • 但我不想,因为我喜欢默认的(我在程序中的其他地方使用它)。

  • 所以问题是:如何制作 标题更高?

我的代码:

String headers[] = new String[3];
    headers[0] = "Header1";
    headers[1] = "Header2";
    headers[2] = "<html><center>Long<br>Centered</br></center></html>";
    DefaultTableModel dtm = new DefaultTableModel();
    dtm.setColumnIdentifiers(headers);
    dtm.setRowCount(5);
    jTable1.setModel(dtm);
    jTable1.getTableHeader().setPreferredSize(
                new Dimension(jTable1.getColumnModel().getTotalColumnWidth(),32));

2 个答案:

答案 0 :(得分:5)

尝试以下方法:

table.getTableHeader().setPreferredSize(
      new Dimension(table.getColumnModel().getTotalColumnWidth(), 32));

这会改变标题的大小:

alt text http://img96.imageshack.us/img96/7544/so2343391.png

要使文字居中,您可以使用<center> - 标记:

headers[2] = "<html><center>Long Centered<br>Header";

alt text http://img710.imageshack.us/img710/705/so23436532.png

修改

对齐方式由LookAndFeel设置。 WindowsTableHeaderUI例如显式调用

setHorizontalAlignment(LEADING);

解决此问题的最简单方法是:

(JLabel)table.getTableHeader().getDefaultRenderer())
      .setHorizontalAlignment(SwingConstants.CENTER);

请注意,之后更改LookAndFeel时,此更改会丢失。

答案 1 :(得分:1)

大家好我试过这个并且它有效:

    DefaultTableCellRenderer r;

    String headers[] = new String[3];
    headers[0] = "Category";
    headers[1] = "Item";
    headers[2] = "<html><center>Packaging<br>unit</center></br></html>";
    DefaultTableModel dtm = new DefaultTableModel();
    table.setModel(dtm);
    r = (DefaultTableCellRenderer)table.getTableHeader().getDefaultRenderer();
    r.setHorizontalAlignment(JLabel.CENTER);
    dtm.setColumnIdentifiers(headers);

    table.getTableHeader().setPreferredSize(new Dimension(table.getColumnModel().getTotalColumnWidth(),32));