Java Swing - несколько заголовков столбцов в JTable? - PullRequest
12 голосов
/ 23 июля 2010

Есть ли способ создать несколько заголовков столбцов в JTable? Я имею в виду, что обычно есть только одна строка, но мне нужно две из них с одинаковым форматом (подобный заголовку) и объединить несколько ячеек одного из этих заголовков.

Мне нужно что-то вроде этого:

Header0 |          Header123          | Header4
Header0 | Header1 | Header2 | Header3 | Header4

Есть ли способ?

Ответы [ 3 ]

6 голосов
/ 17 апреля 2013

Ник Мейер, спасибо за любезный ответ, хотя содержание вашего адреса немного устарело.я запускаю его с jre 1.7, и он работает не так, как ожидалось, но его можно изменить, чтобы он работал правильно.изменения, которые я сделал, следующие:

/*
* add these code in GroupableTableHeader
*/

  public void updateUI(){
//      setUI(this.getUI());

      TableCellRenderer renderer = getDefaultRenderer();
      if (renderer instanceof Component) {
          SwingUtilities.updateComponentTreeUI((Component)renderer);
      }
  }

/*
* add these code in GroupableTableHeaderUI in 2 places, you must know where
*/
      if (renderer == null) {
          renderer = header.getDefaultRenderer();
      }

/*
* change the getSize method in ColumnGroup 
*/

  public Dimension getSize(JTable table) {
    Component comp = renderer.getTableCellRendererComponent(
        table, getHeaderValue(), false, false,-1, -1);
    int height = comp.getPreferredSize().height; 
    int width  = 0;
    Enumeration en = v.elements();
    while (en.hasMoreElements()) {
      Object obj = en.nextElement();
      if (obj instanceof TableColumn) {
        TableColumn aColumn = (TableColumn)obj;
        width += aColumn.getWidth();
//        width += margin;
      } else {
        width += ((ColumnGroup)obj).getSize(table).width;
      }
    }
    return new Dimension(width, height);
  }

и окончательные результаты.enter image description here

5 голосов
/ 23 июля 2010

Пример Groupable Header - это старый код, который может вам помочь.

1 голос
/ 23 июля 2010

вы можете расширить BasicTableHeaderUI и написать собственную реализацию метода рисования, в которой вы можете нарисовать любой тип заголовка. после этого измените интерфейс заголовка по умолчанию с помощью следующей команды table.getTableHeader().setUI(MyTableHeaderUI)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...