JavaFX2のTableViewの機能 "実行時にユーザーが列を並べ替える"。 私はアプリケーション内の特定のテーブルに対してこの機能を無効にしたいと思います。JavaFX2 TableViewで列並べ替えを無効にするにはどうすればよいですか?
APIドキュメントを見ると、明らかなAPIフックはありません。しかし、columns
プロパティがあります。ドキュメントによれば、それは
を表しています。このTableViewの一部であるTableColumns。ユーザーがTableView列を並べ替えると、このリストは現在の表示順序を反映して更新されます。
変更が発生した後に少なくともリセットすることができたら、リスナーを追加して変更後の事実をリセットしてみました。私はwasPermutated
を頼むとき
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
を中止します。
並べ替えを防止する方法はありますか、または少なくともプログラム的に元に戻す方法はありますか?
私はそのメソッドを試したところ、列を移動するときに 'onChanged'メソッドが呼び出されます。しかし、私は 'change.wasPermutated()'でIllegalStateExceptionを取得します。 – assylias
その場合、私のコードは多分複雑すぎるでしょう。私は最小限の例を設定し、そこから続行します。 –
ちょうど私の答えを編集し、作品の種類。状態を確認する前に 'change.next()'を最初に呼び出す必要があります+移動する列は、置換されたものではなく、追加されたフラグを設定しているようです... – assylias