JavaFX:保存并恢复TableView的视觉状态(顺序,宽度和可见性) [英] JavaFX: Save and restore visual state of TableView (order, width and visibility)

查看:196
本文介绍了JavaFX:保存并恢复TableView的视觉状态(顺序,宽度和可见性)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在JavaFX TableView中,如何确定

In a JavaFX TableView, how can I determine changes of


  • 我的更改。列顺序[已解决]

  • II。列的宽度[已解决]

  • III。列表的可见性[解决]

将其保存为首选项并将其还原,下次启动应用程序时

to save them in preferences and restore them, the next time I start an application?

我。列顺序

现在工作。但是, wasRemoved()在重新排序列时触发,而不是 wasPermutation()

Works now. However, wasRemoved() is triggered when reordering columns, not 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)
      }
    }
  }
});

II。列的宽度

这是正常的。

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

III。该列的可见性

这样做的伎俩。

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。

I have implemented a simple custom TableView as an extension of the TableView for automated storage of the columns order and width. It is based on the given solution in the question. My custom TableView is called PropertySaveTableView.

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

EinstellungService.java只是一个界面永久存储的属性。您必须使用自己喜欢的技术创建自己的实现。

The "EinstellungService.java" is only a interface for permanent storage of the properties. You must create your own implementation with you favorite technology.

也许我会在稍后添加可见性保存,如果是这样,我会在这里通知您。

Maybe i will add the visibility saving later, if so i will let you know here.

这篇关于JavaFX:保存并恢复TableView的视觉状态(顺序,宽度和可见性)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆