Объединение столбцов в JTable - PullRequest
1 голос
/ 06 апреля 2010

Я работаю в JTable, и у меня есть такое требование. Скажем, есть 4 столбца, а именно 10,20,30,40

Теперь значение обычно составляет 10-20, 20-30 и 30-40. Поэтому нам было легко отобразить название для этого диапазона.

Но в последнее время значения начали появляться случайным образом, как 15-25 10-25,25-30

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

Чтобы быть более точным, я должен иметь возможность объединять и разбивать ячейки на основе содержимого ячейки.

РЕДАКТИРОВАТЬ: Это так. Человеку назначается задание на определенный момент времени

10|          |20|          |30|

  |----------|
                |----------|

представляет 10-20 и 20-30. Первая строка 10,20,30 - это имена столбцов. Вторая строка - графическое представление блока, представляющего 10-20 и 20-30. Теперь, если значение 15-25 приходит

10|          |20|          |30|

  |----------|  |----------|
       |-----------|
           |-----------|
    |-------------|

  |----------|  |----------|

На самом деле между первой и четвертой строками нет промежутка, чтобы показать, что они являются отдельными ячейками. Теперь, когда данные поступают в промежуточные диапазоны, такие как 15-25, где мы должны выровнять форму ячейки, как описано выше это.

Ответы [ 2 ]

3 голосов
/ 06 апреля 2010

Вы можете объединить столбцы JTable на уровнях Модель или Представление. Ни один из них не особенно хорошо поддерживается в Swing (т. Е. Нет встроенной функциональности jTable.mergeColumns (colA, colB)).

Скажем, что у вас есть таблица, подобная этой:

A  B  C
1  2  3
2  4  6    

Если вы объединяете столбцы B и C на уровне модели, ваша модель скажет, что есть только 2 столбца (A и B + C), и определит значения второго столбца 'B и C', скажем 2 + 3 = 5 и 4 + 6 = 10; или можно сказать, что значения строк этого столбца, такие как «2 3» и «4 6».

Если вы объединяете эти столбцы на уровне просмотра, вы должны предоставить свой собственный ColumnCellRenderer для столбцов B и C и как-то избежать рисования линий сетки. Я не рекомендую такой подход.

Последний вариант заключается в одновременном изменении модели и вида: вы можете исправить код, на который указывает akf (заархивированную версию можно загрузить с http://www.codeguru.com/java/articles/139.shtml), подставив начальную строку AttributiveCellTableModel s setDataVector() метод следующим образом:

  public void setDataVector(Vector newData, Vector columnNames) {
    if (newData == null)
      throw new IllegalArgumentException("setDataVector() - Null parameter");
    dataVector = newData;
    columnIdentifiers = new Vector(columnNames);

у меня нормально работает под jdk6

2 голосов
/ 06 апреля 2010

Единственное место, где я видел это реализованное в Swing, это третий пример по этой ссылке . Ключевыми аспектами, которые здесь рассматриваются, является переопределение метода getCellRect в JTable и переопределение пользовательского интерфейса таблицы для рисования.

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