Индекс столбца не меняется после перетаскивания столбцов в Jtable

#java #swing #jtable

#java #качать #jtable

Вопрос:

Я использую JTable для отображения информации. После рендеринга информации, если я перетаскиваю столбцы, чтобы изменить их порядок, информация отображается таким же образом в сеансе. Но когда я пытаюсь зафиксировать изменения, проверяя имена столбцов путем повторения имен столбцов, последовательность такая же, как и у более старой. Почему последнее представление недоступно из API?

Комментарии:

1. Представление и модель полностью различны. Изменение порядка столбцов не должно влиять на модель.

Ответ №1:

Как прокомментировал Hovercraft Full Of Eels, индексы столбцов в представлении изменяются независимо от индексов столбцов в модели. JTable JavaDoc имеет это, чтобы сказать об этом:

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

JTable предлагает методы convertColumnIndexToModel() и convertColumnIndexToView() которые вы можете использовать для перевода номеров столбцов из одного в другой. Вы можете использовать их, чтобы выяснить, были ли (и как) переставлены столбцы.

Чтобы получать уведомления об изменениях столбцов по мере их возникновения, используйте TableColumnModelListener :

 myTable.getColumnModel().addColumnModelListener( new TableColumnModelListener() {
    //etc.
} );
  

Комментарии:

1. Есть ли в JDK 1.5 какой-либо способ применить изменения из представления к модели?

2. Поддержка преобразования индексов столбцов существует уже давно. В JDK6 добавлена поддержка преобразования индексов строк, поскольку добавлена поддержка сортировки / фильтрации.