2010-04-06 4 views
1

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

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

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

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

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

EDIT: Это как this.A человек поставлена ​​задача на определенный момент времени

10|   |20|   |30| 

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

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

10|   |20|   |30| 

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

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

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

+1

Пожалуйста, укажите, что вы получаете сейчас, и что вы хотели бы получить взамен. Можете ли вы привести пример данных с использованием обычного текста? – tucuxi

ответ

2

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

+1

Это вызывает ошибку Stackoverflow при запуске в 1.4 :( – Harish

+0

Интересно - мне удалось заставить его работать на jdk6 и использовать его в будущих проектах – tucuxi

3

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

Скажите, что у вас есть таблица вроде этого:

A B C 
1 2 3 
2 4 6  

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

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

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

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

отлично работает для меня под JDK6

Смежные вопросы