miso
miso

Reputation: 155

Creating multi-line header for JTable

I use JTable GUI component with NetBeans.

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

Answers (2)

Peter Lang
Peter Lang

Reputation: 55524

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.

Upvotes: 5

RtsGeneral
RtsGeneral

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

Related Questions