【发布时间】:2012-05-22 20:11:07
【问题描述】:
JavaFX2 的TableView 功能 “用户在运行时对列重新排序”。 我想为我的应用程序中的一个特定表禁用此功能。
查看 API 文档,没有明显的 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();
}
}
但是,当我请求 wasPermutated 时,侦听器会以 IllegalStateException 中止。
有没有办法防止重新排序,或者至少以编程方式恢复它?
【问题讨论】:
-
我刚刚尝试了该方法,并且在移动列时确实调用了
onChanged方法。但是我在change.wasPermutated()上得到一个 IllegalStateException。 -
在那种情况下,我的代码可能太复杂了。我将设置一个最小的示例并从那里继续。
-
刚刚对我的答案进行了编辑,它有点工作。您需要先调用
change.next(),然后再检查其状态+移动列似乎将标志设置为添加,而不是排列... -
也重置似乎没有做你认为它正在做的事情 - 请参阅此处的 javadoc:docs.oracle.com/javafx/2/api/javafx/collections/…
标签: java user-interface tableview javafx-2