Как отключить переупорядочивание столбцов в JavaFX2 TableView?

Функции JavaFX2 TableView «Изменение порядка столбцов пользователем во время выполнения». Я хотел бы отключить эту функцию для одной конкретной таблицы в моем приложении.

Глядя на документацию по API, для этого нет очевидного хука API. Однако существует свойство columns. Согласно документу, он представляет

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

Надеясь, что я хотя бы смогу сбросить изменение после того, как оно произошло, я попытался добавить прослушиватель для сброса изменений постфактум.

import javafx.application.Application;
import javafx.collections.ListChangeListener;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;

public class TableTest extends Application {

  public static void main(String[] args) {
    launch(args);
  }


  @Override
  public void start(Stage stage) {
    TableView tableView = new TableView();
    tableView.getColumns().setAll(new TableColumn(), new TableColumn());
    tableView.getColumns().addListener(new ListChangeListener() {
        @Override
        public void onChanged(Change change) {
            if (change.wasPermutated()){
               change.reset();
            }
        }
    });
    stage.setScene(new Scene(tableView));
    stage.show();
  }
}

Однако прослушиватель прерывается с IllegalStateException, когда я запрашиваю wasPermutated.
Есть ли способ предотвратить изменение порядка или, по крайней мере, отменить его программно?

6
задан Urs Reupke 15 May 2012 в 10:46
поделиться