events - JavaFX:保存和恢复 TableView 的视觉状态(顺序、宽度和可见性)

标签 events javafx listener tableview

在 JavaFX TableView 中,如何确定

  • 一、列序[已解决]
  • 二、列宽 [已解决]
  • 三、列的可见性[已解决]

  • 将它们保存在首选项中并在下次启动应用程序时恢复它们?

    一、列序

    现在工作。但是,wasRemoved()在重新排序列时触发,而不是 wasPermutation() .
    final List<TableColumn<MyType, ?>> unchangedColumns = Collections.unmodifiableList(new ArrayList<TableColumn<MyType, ?>>(columns));
    
    columns.addListener(new ListChangeListener<TableColumn<MyType, ?>>() {
      @Override
      public void onChanged(ListChangeListener.Change<? extends TableColumn<MyType, ?>> change) {
        while (change.next()) {
          if (change.wasRemoved()) {
            ObservableList<TableColumn<MyType, ?>> columns = table.getColumns();
            int[] colOrder = new int[columns.size()];
    
            for (int i = 0; i < columns.size(); ++i) {
              colOrder[i] = unchangedColumns.indexOf(columns.get(i));
            }
    
            // colOrder will now contain current order (e.g. 1, 2, 0, 5, 4)
          }
        }
      }
    });
    

    二、列宽

    这是有效的。
    for (TableColumn<MyType, ?> column: columns) {
      column.widthProperty().addListener(new ChangeListener<Number>() {
        @Override
          public void changed(ObservableValue<? extends Number> observableValue, Number oldWidth, Number newWidth) {
            logger.info("Width: " + oldWidth + " -> " + newWidth);
      });
    }
    

    三、栏目可见度

    这可以解决问题。
    for (TableColumn<MyType, ?> column: columns) {
      column.visibleProperty().addListener(new ChangeListener<Boolean>() {
        @Override
          public void changed(ObservableValue<? extends Boolean> observableValue, Boolean oldVisibility, Boolean newVisibility) {
            logger.info("Visibility: " + oldVisibility + " -> " + newVisibility);
      });
    }
    

    最佳答案

    我已经实现了一个简单的自定义 TableView 作为 TableView 的扩展,用于自动存储列顺序和宽度。它基于问题中给定的解决方案。我的自定义 TableView 称为 PropertySaveTableView。

    你可以在这里找到它:
    https://gist.github.com/y4nnick/ca976e58be23aab20dfbc8d81ea46816

    “EinstellungService.java”只是一个用于永久存储属性的接口(interface)。您必须使用自己喜欢的技术创建自己的实现。

    也许我稍后会添加可见性保存,如果是这样,我会在这里告诉你。

    关于events - JavaFX:保存和恢复 TableView 的视觉状态(顺序、宽度和可见性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27189090/

    相关文章:

    c# - 如何在 ASP.NET 中对用户进行身份验证

    JavaFX:如何知道应用程序正在哪个系统上运行?

    JavaFx:监听器和/或绑定(bind)处理

    JavaFX ComboBox OnChangeListener 回滚变化

    javascript - 如何将 JS 变量的值(不是引用)传递给函数?

    c# - 在事件触发器中处理自定义 RoutedEvent

    unit-testing - Angular 2. 在单元测试中发出悬停事件

    javascript - 如何在 jQuery 中第二次按相同键时禁用该键?

    java - 如何使用 javafx fxml 单击设置按钮时打开上下文菜单。该操作应该是 Controller 中的某种方法

    java - 如果需要从主类调用 Stage,如何在类文件上拆分 JavaFX 节点?