In un JavaFX TableView, come posso determinare le variazioni diJavaFX: salvare e ripristinare lo stato visivo del TableView (ordine, la larghezza e la visibilità)
- I. L'ordine delle colonne [risolto]
- II. La larghezza della colonna [risolta]
- III. La visibilità della colonna [risolto]
per salvarle nelle preferenze e ripristinarle, la prossima volta che avvio un'applicazione?
I. Per La colonna
ora funziona. Tuttavia, wasRemoved()
viene attivato quando si riordinano le colonne, non 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. La larghezza della colonna
Questo sta funzionando.
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. Visibilità della colonna
Questo è il trucco.
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);
});
}
Gestito per gestire ora la larghezza della colonna e l'ordine delle colonne. Tuttavia, non ho ancora idea della visibilità della colonna. – user1438038
Hai provato 'column.visibleProperty()'? – ItachiUchiha
Perché hai bisogno di ascoltatori? Non è sufficiente controllare questi quando l'applicazione si chiude, invece di aggiornare i valori ogni volta che cambiano? –