【发布时间】:2015-01-27 03:19:27
【问题描述】:
在 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);
});
}
【问题讨论】:
-
现在可以处理列宽和列顺序。不过,还不知道列的可见性。
-
你试过
column.visibleProperty()吗? -
为什么需要听众?仅在应用程序退出时检查这些值,而不是在值发生变化时更新它们还不够吗?
-
我同意@James_D - 在我的应用程序中,我只在应用程序启动/停止时检查/保存这些设置。
标签: events javafx listener tableview