问题
I use JTable GUI component with NetBeans.
- I want to create multi-line headers 
- I am able to this, when I create custom renderer for table headers 
- BUT I don't want to, because I like default one (I use it everywhere else in program). 
- So the problem is : How to make header heigher? 
My code :
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));
回答1:
Try the following:
table.getTableHeader().setPreferredSize(
      new Dimension(table.getColumnModel().getTotalColumnWidth(), 32));
This will change the size of the header:
To center the text, you can use the <center>-tag:
headers[2] = "<html><center>Long Centered<br>Header";
EDIT:
The alignment is set by your LookAndFeel. WindowsTableHeaderUI for example explicitly calls
setHorizontalAlignment(LEADING);
The easiest way to solve this is:
(JLabel)table.getTableHeader().getDefaultRenderer())
      .setHorizontalAlignment(SwingConstants.CENTER);
Note that this change is lost when you change your LookAndFeel afterwards.
回答2:
hi guys i tried this and it works:
    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));
来源:https://stackoverflow.com/questions/2343391/creating-multi-line-header-for-jtable