JavaFX2 のTableViewは、「実行時のユーザーによる列の並べ替え」を備えています。アプリケーション内の特定のテーブルに対してこの機能を無効にしたいと考えています。
API doc を見ると、これに対する明らかな API フックはありません。ただし、columns
プロパティがあります。ドキュメントによると、それは
この TableView の一部である TableColumns。ユーザーが 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
ます。
並べ替えを防止する方法、または少なくともプログラムで元に戻す方法はありますか?