Создание многострочного заголовка для JTable

Я использую компонент графического интерфейса JTable с NetBeans.

  • Я хочу создать многострочные заголовки

  • Я могу это сделать, когда создаю настраиваемое средство визуализации для заголовков таблиц.

  • НО я не хочу, потому что мне нравится стандартный (я использую его везде в программе).

  • Итак, проблема заключается в следующем: Как сделать заголовок выше?

Мой код:

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));

person miso    schedule 26.02.2010    source источник
comment
Ничего, я снова обновил свой ответ :) Проверьте, выглядит ли он так, как ожидалось.   -  person Peter Lang    schedule 27.02.2010


Ответы (2)


Попробуйте следующее:

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

Это изменит размер заголовка:

альтернативный текст

Чтобы центрировать текст, вы можете использовать <center>-тег:

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

альтернативный текст

ИЗМЕНИТЬ:

Выравнивание устанавливается вашим LookAndFeel. WindowsTableHeaderUI например, явно вызывает

setHorizontalAlignment(LEADING);

Самый простой способ решить эту проблему:

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

Обратите внимание, что это изменение теряется, когда вы впоследствии меняете LookAndFeel.

person Peter Lang    schedule 26.02.2010
comment
Отлично, спасибо, это то, что мне нужно. Однако теперь у меня возникают проблемы с центральным текстом в заголовке ... Есть ли шанс, что вы знаете, как это сделать? - person miso; 26.02.2010
comment
Тег html ‹center› не поможет ... SwingConstants.CENTER мог бы, но я бы снова хотел создать собственное средство визуализации для заголовков: / - person miso; 26.02.2010
comment
Я попробовал center, и это сработало: "<html><center>Long<br>Header</br></html>". Вы пробовали подобное? - person Peter Lang; 26.02.2010
comment
заголовки [0] = ‹html› понедельник ‹br› + неделя [0] + ‹/br› ‹/html›; У меня не работает: / Размер моих заголовков можно изменить, кстати - person miso; 26.02.2010
comment
Питер, ты снова мне помог, я благодарен :) Это правильно, как ты предлагаешь ((JLabel) table.getTableHeader (). GetDefaultRenderer ()). SetHorizontalAlignment (SwingConstants.CENTER); решает это - person miso; 27.02.2010

привет, ребята, я пробовал это, и это работает:

    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));
person RtsGeneral    schedule 31.07.2012