簡體   English   中英

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

[英]How to disable column-reordering in a JavaFX2 TableView?

JavaFX2的TableView功能“用戶在運行時重新排序列”。 我想為我的應用程序中的一個特定表禁用此功能。

查看API文檔,沒有明顯的API掛鈎。 但是,有columns - 屬性。 根據文件,它代表

TableColumns是此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();
  }
}

但是,當我請求wasPermutated時,監聽器以IllegalStateException中止。
有沒有辦法防止重新排序,或者至少以編程方式還原它?

請參閱下面的SSCCE,該SSCCE顯示偵聽器被調用 - 但標志設置為在移動列時added 請注意,在使用更改之前需要調用next() ,否則將出現IllegalStateException 有關簡單的規范示例,請參閱ListChangeListener.Changejavadoc

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();
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM