2

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));
Peter Lang
  • 54,264
  • 27
  • 148
  • 161
miso
  • 155
  • 1
  • 3
  • 11

2 Answers2

5

Try the following:

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

This will change the size of the header:

alt text

To center the text, you can use the <center>-tag:

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

alt text

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.

Glorfindel
  • 21,988
  • 13
  • 81
  • 109
Peter Lang
  • 54,264
  • 27
  • 148
  • 161
  • Great, thanx that's what I need. However, I am now having quite trouble center text in header ... Is there any chance you know how to? – miso Feb 26 '10 at 18:16
  • html
    tag wont help ... SwingConstants.CENTER would, but I would againg need to create own renderer for headers :/
    – miso Feb 26 '10 at 18:20
  • I tried `center` and it worked: `"
    Long
    Header"`. Have you tried like this?
    – Peter Lang Feb 26 '10 at 18:57
  • headers[0] = "Monday
    "+week[0]+""; Does not work for me :/ My headers are resizable btw
    – miso Feb 26 '10 at 19:02
  • Peter you helped me once again, I am thankful :) It is correct as you suggest ((JLabel)table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(SwingConstants.CENTER); solves it – miso Feb 27 '10 at 13:56
1

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));
RtsGeneral
  • 11
  • 1