在 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/