Reputation: 155
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));
Upvotes: 2
Views: 11884
Reputation: 55524
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.
Upvotes: 5
Reputation: 11
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));
Upvotes: 1