如何禁用列重新排序在JavaFX2 TableView中?(How to disable colum

2019-06-24 11:37发布

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

综观API文档,对于这个没有明显的API钩子。 然而,有中, columns -属性。 根据该文档,它代表

该TableColumn来作为此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
有没有一种方法,以防止重新排序,或者至少恢复它编程?

Answer 1:

看到SSCCE表明这些听众被调用下面-但标志设置为added移动列时。 请注意,您需要调用next()使用变化,否则你会得到一个前IllegalStateException 。 请参阅的javadoc的ListChangeListener.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();
  }
}


文章来源: How to disable column-reordering in a JavaFX2 TableView?