JavaFX2 TableView características "Reordenación de columna por el usuario en tiempo de ejecución". Me gustaría desactivar esta función para una tabla específica en mi aplicación.¿Cómo deshabilitar el reordenamiento de columnas en JavaFX2 TableView?
En cuanto al documento API, no hay un gancho de API obvio para esto. Sin embargo, existe columns
-propiedad. De acuerdo con el documento, representa
TableColumns que forman parte de este TableView. A medida que el usuario reordena las columnas TableView, esta lista se actualizará para reflejar el orden visual actual.
Con la esperanza de que al menos podría restablecer un cambio después de que ocurriera, intenté agregar un oyente para restablecer los cambios después del hecho.
import javafx.application.Application;
import javafx.collections.ListChangeListener;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
public class TableTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
TableView tableView = new TableView();
tableView.getColumns().setAll(new TableColumn(), new TableColumn());
tableView.getColumns().addListener(new ListChangeListener() {
@Override
public void onChanged(Change change) {
if (change.wasPermutated()){
change.reset();
}
}
});
stage.setScene(new Scene(tableView));
stage.show();
}
}
Sin embargo, el oyente aborta con un IllegalStateException
cuando pido wasPermutated
.
¿Hay alguna manera de evitar el reordenamiento, o al menos revertirlo programáticamente?
Acabo de probar ese método y se llama al método 'onChanged' al mover las columnas. Sin embargo, recibo una IllegalStateException en 'change.wasPermutated()'. – assylias
En ese caso, mi código probablemente era demasiado complejo. Crearé un ejemplo mínimo y continuaré desde allí. –
Acabo de editar mi respuesta y funciona. Primero debe llamar a 'change.next()' antes de comprobar su estado + mover las columnas parece configurar el indicador para agregarse, no permutarse ... – assylias