JXTable: как запросить состояние моделей столбцов?

Я пишу некоторые методы сохранения пользовательского интерфейса для приложения. Я пытаюсь расшириться до JXTable с фиксированным набором столбцов N в модели таблицы.

Как я могу получить и установить следующую информацию для столбца #k в JXTable, где k — это номер столбца в порядке модели таблицы? Это не так просто, как кажется, или, по крайней мере, мне не хватает какая-то хитрая информация.

  • ширина колонки
  • видимость столбца
  • порядок столбцов

TableColumnModelExt.getColumns() содержит эту сумасшедшую заметку, которую я не могу разобрать:

java.util.List<javax.swing.table.TableColumn> getColumns(boolean includeHidden)

Возвращает список содержащихся столбцов таблицы. Включает или исключает невидимые столбцы в зависимости от того, имеет ли свойство includeHidden значение true или false соответственно. Если false, итератор по списку эквивалентен перечислению, возвращаемому функцией getColumns().

ПРИМЕЧАНИЕ: порядок столбцов в списке зависит от того, включены ли невидимые столбцы, в первом случае это порядок вставки, во втором - текущий порядок видимых столбцов.

Кроме того, я знаю, как использовать JTable.convertColumnIndexToView(), но возвращает -1 для скрытых столбцов и не оставляет информации о том, в каком порядке будет располагаться скрытый столбец, если его снова сделать видимым. JXTable знает эту информацию, потому что вы можете восстановить видимость столбца, и он помещает столбец туда, где он был до того, как был скрыт.


person Jason S    schedule 02.12.2011    source источник
comment
почему вы думаете, что это безумие? Осторожно: я написал документ и почти все остальное, связанное с JXTable :-)   -  person kleopatra    schedule 02.12.2011
comment
Хорошо, хороший момент, позвольте мне быть объективным об этом. JXTable использует другие термины, чем JTable. JXTable использует порядок вставки и текущий порядок видимых столбцов, тогда как JXTable использует индексы представления и модели. Если порядок просмотра = текущий порядок видимых столбцов, а порядок модели = порядок вставки, то было бы чрезвычайно полезно, если бы документация JXTable соответствовала этим понятиям, выраженным в JTable.convertColumnIndexToView.   -  person Jason S    schedule 02.12.2011
comment
см. вашу цель - но порядок вставки может отличаться от порядка модели, если ... ну, столбцы изначально были не вставлены в порядке модели :-) Благодаря поддержке скрытых столбцов JXTable добавляет дополнительное измерение: создание скрытый столбец, видимый снова, должен поддерживать перемещение его ближе всего к его позиции просмотра в момент, когда он был скрыт, независимо от перемещения видимых столбцов. Итак, есть третья система координат: текущий вид (для видимого в данный момент), потенциальный вид (когда видны все скрытые) и модель. Вклады в формулировку этого факта с радостью принимаются :-)   -  person kleopatra    schedule 02.12.2011


Ответы (2)


Если я вас правильно понимаю, вы находитесь после индекса столбца представления, который будет иметь скрытый столбец, если он снова станет видимым. Это не поддерживается напрямую.

Для целей сохранения/восстановления существует class XProperties (официально не поддерживается, но работает без сбоев), делая это в контексте AppFramework, что может дать вам представление о том, как это сделать.

Изменить

Чтобы получить TableColumn по modelIndex, получите все столбцы, выполните цикл и сравните modelIndex. Некоторый псевдокод в псевдометоде getColumnFor(modelIndex):

List allColumns = table.getColumns(true);
forEach {
   if (column.getModelIndex() == modelIndex) {
        return column;
   }
return null;
person kleopatra    schedule 02.12.2011
comment
Хм. Хорошо, а какой самый простой способ получить TableColumn из JXTable (независимо от того, виден он или нет) с учетом индекса модели? - person Jason S; 02.12.2011

Рассмотрите возможность использования Swing Application Framework (JSR-296).

Хотя этот проект сейчас мертв, насколько мне известно, я думаю, что это лучшая отправная точка, чем реализация этой функции с нуля. (Это с открытым исходным кодом.)

Если вы создаете свое приложение на основе платформы NetBeans (которую я настоятельно рекомендую), загляните в мой блог о том, как использовать эти две платформы вместе:

http://puces-blog.blogspot.com/2009/04/netbeans-platform-meets-swing.html

Примечание. Существует также Лучшая структура приложений Swing.

The Better Swing Application Framework is a fork of the original Swing Application Framework (appframework) reference implementation of JSR 296. Since August 2009, the original Swing Application Framework project has been on hold, and therefore this fork was created to carry on the work until the original project resumes. 

Я мало что знаю об этом, но это может быть даже лучшей отправной точкой.

person Puce    schedule 02.12.2011
comment
Спасибо, но мой вопрос на самом деле не о настойчивости; У меня уже есть фреймворк, который мне подходит. Мой вопрос касается получения/установки информации о компоненте GUI. - person Jason S; 02.12.2011