Заголовки JTable и строки распорок - PullRequest
4 голосов
/ 17 августа 2011

Я новичок в Swing и сегодня борюсь с компонентом JTable. Поскольку я пытаюсь составить несколько необычную таблицу, я пока не смог найти конкретные ответы, которые ищу где-либо.

Я бы хотел, чтобы "группа" заголовков находилась в самой верхней части таблицы. Это означает 3 или 4 строки, которые охватывают всю таблицу, и «группируют» различные столбцы, по существу разделяя их.

Пример (простите за усталость глаз):

////////////////////////////////ANIMALS//////////////////////////
/////////Mammals///////////////////////Rodents///////////////////
////People/////Dogs//////////Rats/////Rodents of Unusual Size////

Где косая черта ("/") обозначает пробел. Первый заголовок под названием «ЖИВОТНЫЕ» относится ко всем столбцам в таблице. Второй заголовок вниз, разделы ЖИВОТНЫЕ, и так далее, и тому подобное. После третьего и последнего заголовка мы получаем фактическую таблицу, в которой в каждой строке будет 4 столбца, по одному для каждого типа животных.

Очевидно, что это пример, и, вероятно, плохой, но это то, что я имею в виду под "разбиением заголовков".

Мой вопрос: Я не вижу, как JTableHeader и TableColumnModel поддерживают эту функцию. Если они это сделают, кто-то может подтолкнуть меня в правильном направлении. Если они этого не делают, это, конечно, не может быть в первый раз, когда приложению Swing нужно что-то подобное Любые компоненты сторонних производителей, о которых кто-нибудь знает?

Кроме того, я хотел бы иметь возможность разбрасывать «Spacer» или Spanning Rows по всей таблице, представляя группу строк. Эти разделители будут существовать внутри таблицы (а не над ней, как заголовок), но будут охватывать каждый столбец и иметь одну метку, представляющую имя группы, представленное последующими строками. Опять же, я не вижу, чтобы Swing поддерживал это, какие-либо идеи?

Спасибо, и я прошу прощения за действительно ужасный пример / рисунок.

Ответы [ 4 ]

2 голосов
/ 17 августа 2011

Возможно, вы сможете адаптировать этот почтенный пример заголовка с несколькими строками .

1 голос
/ 17 августа 2011
Ядро

группировки (как строки / столбца), так и разбиение не поддерживаются ядром Swing, ни для заголовка, ни для самой таблицы. Проектная таблица JTable - это , а не универсальная сетка. Попытка изменить поведение, похожее на сетку, и визуальные эффекты будут бороться с его дизайном. Можно сделать, но это не тривиально для достижения. @Trashgod указал на некоторые из этих боев (они все еще работают? Они похожи на старые образцы Tame первого поколения?). A JIDE - это коммерческий продукт, который поддерживает его (отказ от ответственности: никогда не использовал его в производстве :-)

1 голос
/ 17 августа 2011

По умолчанию в JTable есть только одна строка заголовка (и это не совсем строка JTable, это JTableHeader). В любом случае вы можете реализовать TableCellRenderer , который отображает первые n строк, не являющихся заголовками, таким образом, как будто это заголовок.

Шаги более или менее следующие:

  1. Реализация TableCellRenderer для отображения ординарной ячейки JTable нужной строки, например, ячейки заголовка

нравится:

public Component getTableCellRendererComponent(JTable table, Object value,
    boolean isSelected, boolean hasFocus, int row, int column){   

    this.setOpaque(true);
    TableCellRenderer renderer = table.getTableHeader().getDefaultRenderer();
    return renderer.getTableCellRendererComponent(table, value, isSelected,
          hasFocus, row, column);
}
  1. Расширьте JTable и реализуйте следующий метод для возврата нужного средства визуализации ячеек:

    public TableCellRenderer getCellRenderer(int row, int column){}
    

В любом случае с вашими требованиями есть еще одна проблема, которую нужно решить: JTable имеет фиксированное число столбцов, поэтому вам нужно найти обходной путь для достижения этого результата.

0 голосов
/ 16 апреля 2012
...