JXTable: как запросить состояние на моделях столбцов? - PullRequest
2 голосов
/ 02 декабря 2011

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

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

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

TableColumnModelExt.getColumns() включает эту сумасшедшую заметку, с которой у меня возникают проблемы при разборе:

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011

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

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

Редактировать

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

List allColumns = table.getColumns(true);
forEach {
   if (column.getModelIndex() == modelIndex) {
        return column;
   }
return null;
1 голос
/ 02 декабря 2011

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

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

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

http://puces -blog.blogspot.com / 2009/04 / NetBeans платформа встречает swing.html

Примечание. Существует также Better Swing Application Framework

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. 

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

...