如何禁用JavaFX2 TableView中的列重新排序?

JavaFX2的TableView具有“用户在运行时重新排序列”的功能。我想为我的应用程序中的一个特定表禁用此功能。

查看API文档,没有明显的API挂钩。但是,有columns-property。根据文档,它代表

属于此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

有没有办法防止重新排序,或者至少以编程方式还原它?

回答:

参见下面的SSCCE,其中显示了侦听器已被调用-

但是added在移动列时将标志设置为。请注意,您需要先致电next()才能使用更改,否则会收到IllegalStateException。有关简单的规范示例,请参见的javadocListChangeListener.Change

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) {

final TableView tableView = new TableView();

final TableColumn[] columns = {new TableColumn("1"), new TableColumn("2")};

tableView.getColumns().setAll(columns);

tableView.getColumns().addListener(new ListChangeListener() {

public boolean suspended;

@Override

public void onChanged(Change change) {

change.next();

if (change.wasReplaced() && !suspended) {

this.suspended = true;

tableView.getColumns().setAll(columns);

this.suspended = false;

}

}

});

stage.setScene(new Scene(tableView));

stage.show();

}

}

以上是 如何禁用JavaFX2 TableView中的列重新排序? 的全部内容, 来源链接: utcz.com/qa/412945.html

回到顶部