当前位置: 首页 > 面试题库 >

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

洪哲彦
2023-03-14
问题内容

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


 类似资料:
  • 问题内容: 我需要移动现有列的位置(以获得更好的可见性)。 如何做到这一点而又不影响数据? 问题答案: 修改也可以。看一看:

  • 问题内容: df =DataFrame({‘a’:[1,2,3,4],’b’:[2,4,6,8]}) >>> df[‘x’]=df.a + df.b >>> df[‘y’]=df.a - df.b >>> df a b x y 0 1 2 3 -1 1 2 4 6 -2 2 3 6 9 -3 3 4 8 12 -4 现在,我想重新排列列顺序,按如下方式使“ x”,“ y”列成为第一列和第二列: 但

  • 问题内容: 如果我有列表,如何以任意方式重新排序商品? 编辑:我不想洗牌。我想以预定义的方式对它们进行重新排序。(例如,我知道旧列表中的第3个元素应成为新列表中的第一个元素) 问题答案: 你可以这样

  • 问题内容: 我有一堆具有相同列但顺序不同的csv文件。我们正在尝试使用SQL * Plus上载它们,但是我们需要具有固定列排列的列。 例 所需订单:ABCDEF csv文件:ACDEB(有时列不在csv中,因为它不可用) 用python可以实现吗?我们正在使用Access + Macros来做…但这太浪费时间了 PS。对不起,如果有人对我的英语能力感到沮丧。 问题答案: 您可以使用csv模块读取,

  • 问题内容: 在jquery数据表中,我可以禁用特定的列排序 有人知道如何在有角JS中执行此操作吗? 此代码隐藏了我的搜索栏,但无法隐藏我的第一列和第四列的排序功能? 问题答案: 的角度数据表等价于 是 … 您必须包括在控制器中: 参见 http://l-lin.github.io/angular- datatables/archives/#!/api 。

  • 问题内容: 我最后生成目录,我想在开始时移动目录。假设我的PDF中有16页,并且TOC从第13页开始到第15页结束。我想将TOC移到第二页,以便第一页保留为第1页,最后一页保留为第16页。这段代码没有给我我想要的东西: 请提出一些解决方案。 问题答案: 您的公式是错误的。你有: 但这会将您的目录放在第一页。根据您的描述,这不是您想要的。 您想要这样的东西: 此代码使用测试ReorderPage在1