Установить порядок столбцов в JTable - PullRequest
4 голосов
/ 12 ноября 2010

У меня есть JTable с некоторыми столбцами. У меня есть HashMap идентификатора столбца, сопоставленного с позицией в представлении, например:

TableHeader1 | TableHeader2 | TableHeader3
    sth.           sth.          sth.

Я знаю, что:

TableHeader1 -> position 0
TableHeader2 -> position 1
TableHeader3 -> position 2

Теперь я хочу изменить порядок столбцов. Я знаю, что в классе JTable есть функция moveColumn (A, B). Это перемещает столбец от A до B, и B ставится влево или вправо. Моя проблема в том, что я хочу заказать всю таблицу определенным образом, как я могу это сделать? Если я использую moveColumn, я не могу знать, куда было перемещено B, в 5 из 10 случаев это может быть правая сторона, а в других случаях - неправильная.

Надеюсь, вы понимаете мою проблему: -)

Ответы [ 4 ]

7 голосов
/ 12 ноября 2010

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

public static void setColumnOrder(int[] indices, TableColumnModel columnModel) {
    TableColumn column[] = new TableColumn[indices.length];

    for (int i = 0; i < column.length; i++) {
        column[i] = columnModel.getColumn(indices[i]);
    }

    while (columnModel.getColumnCount() > 0) {
        columnModel.removeColumn(columnModel.getColumn(0));
    }

    for (int i = 0; i < column.length; i++) {
        columnModel.addColumn(column[i]);
    }
}
1 голос
/ 17 августа 2016

На основе ответа @Guillaume я нашел способ сделать это без необходимости удалять все столбцы и добавлять их снова.

  public static void setColumnOrder(int[] indices, JTable table, TableColumnModel columnModel) {

    for (int i = 0; i < indices.length; i++) {
      columnModel.moveColumn(i, table.convertColumnIndexToView(indices[i]));
    }
  }

Это работает лучше для меня, потому что с (SwingX) JXTable порядокиз невидимых столбцов не изменяется.

1 голос
/ 12 ноября 2010

ОК, как насчет этого. Может быть немного левое поле.

Расширьте TableColumn и дайте вашему новому классу свойство position. Пусть он реализует Comparable и использует position для сравнения столбцов.

Затем расширьте DefaultTableColumnModel и сохраните TableColumn s в упорядоченном списке.

Ваш JTable теперь должен отображать столбцы в соответствии с их position. Не проверено, но звучит интересно, поэтому я могу попробовать позже.

0 голосов
/ 12 ноября 2010

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

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