Quiero enlazar dos vistas de tabla juntas para que se desplacen en sincronización. ¿Cómo puedo hacer eso? No puedo averiguar cómo acceder a la barra de desplazamiento de una tabla vista.Enlazando dos vistas de tabla juntas de modo que se desplacen en sincronía
Respuesta
No creo que esto sea posible actualmente. TableViewSkin hereda de VirtualContainerBase que tiene un campo VirtualFlow. El objeto VirtualFlow tiene dos campos VirtualScrollBar, hbar y vbar, que es lo que buscas. Sin embargo, no veo ninguna forma de llegar a eso.
Curiosamente, también hay un campo contentWidth privado en TableView aunque esto es privado. Estoy seguro de que el equipo de JFX está siendo extremadamente cauteloso para abrir demasiado de la API, lo que es comprensible. Puede solicitar que se abra el campo contentWidth como una propiedad int como una solicitud de función en la lista de correo de JFX JIRA o openjfx-dev.
Una medida de pausa sería vincular el elemento seleccionado o la propiedad de índice del modelo de selección de vistas de tabla.
He hecho un hack CSS para vincular una Tableview con una barra de desplazamiento externa. Una barra de desplazamiento controla ambas tablas.
Una visión general de mi idea:
- Cree dos tableviews
- hacer uno barra de desplazamiento vertical. Digamos que es myScrollbar en este ejemplo
- Ajuste el min y max de myScrollbar al tamaño de min = 0, max = TableView.Items.size()
- Cuando el valor de cambios myScrollbar continuación, llamar scrollTo de tanto tableview (int) función
- Deshabilitar la barra de desplazamiento vertical nativa de la tabla vista implementada con CSS.
Esto le dará dos tablas, ambas controladas por una barra de desplazamiento externa (myScrollbar).
Este es el código para ocultar la barra de desplazamiento de un tableview usando CSS:
/* The main scrollbar **track** CSS class */
.mytableview .scroll-bar:vertical .track{
-fx-padding:0px;
-fx-background-color:transparent;
-fx-border-color:transparent;
-fx-background-radius: 0em;
-fx-border-radius:2em;
}
/* The increment and decrement button CSS class of scrollbar */
.mytableview .scroll-bar:vertical .increment-button ,
.mytableview .scroll-bar:vertical .decrement-button {
-fx-background-color:transparent;
-fx-background-radius: 0em;
-fx-padding:0 0 0 0;
}
.mytableview .scroll-bar:vertical .increment-arrow,
.mytableview .scroll-bar:vertical .decrement-arrow
{
-fx-shape: " ";
-fx-padding:0;
}
/* The main scrollbar **thumb** CSS class which we drag every time (movable) */
.mytableview .scroll-bar:vertical .thumb {
-fx-background-color:transparent;
-fx-background-insets: 0, 0, 0;
-fx-background-radius: 2em;
-fx-padding:0px;
}
Entonces tenemos que establecer cómo desplazarse por la tableview mediante el uso de la barra de desplazamiento.
scroll.setMax(100); //make sure the max is equal to the size of the table row data.
scroll.setMin(0);
scroll.valueProperty().addListener(new ChangeListener(){
@Override
public void changed(ObservableValue ov, Number t, Number t1) {
//Scroll your tableview according to the table row index
table1.scrollTo(t1.intValue());
table2.scrollTo(t1.intValue());
}
});
http://blog.ngopal.com.np/2012/09/25/how-to-bind-vertical-scroll-in-multi-tableview/
La solución se ve genial.Escríbelo como una publicación para que esté archivado en el desbordamiento de la pila y te daré la recompensa. –
gracias ... y aplausos :) – privatejava
La manera más fácil que he encontrado para resolver el problema consiste en obligar a la valueProperty de lo visible una las barras de desplazamiento ocultos.
// Controller
@FXML private TableView<MyBean> tableLeft;
@FXML private TableView<MyBean> tableRight;
@FXML private ScrollBar scrollBar;
@SuppressWarnings("rawtypes")
private void bindScrollBars(TableView<?> tableView1, TableView<?> tableView2,
ScrollBar scrollBar, Orientation orientation) {
// Get the scrollbar of first table
VirtualFlow vf = (VirtualFlow)tableView1.getChildrenUnmodifiable().get(1);
ScrollBar scrollBar1 = null;
for (final Node subNode: vf.getChildrenUnmodifiable()) {
if (subNode instanceof ScrollBar &&
((ScrollBar)subNode).getOrientation() == orientation) {
scrollBar1 = (ScrollBar)subNode;
}
}
// Get the scrollbar of second table
vf = (VirtualFlow)tableView2.getChildrenUnmodifiable().get(1);
ScrollBar scrollBar2 = null;
for (final Node subNode: vf.getChildrenUnmodifiable()) {
if (subNode instanceof ScrollBar &&
((ScrollBar)subNode).getOrientation() == orientation) {
scrollBar2 = (ScrollBar)subNode;
}
}
// Set min/max of visible scrollbar to min/max of a table scrollbar
scrollBar.setMin(scrollBar1.getMin());
scrollBar.setMax(scrollBar1.getMax());
// bind the hidden scrollbar valueProterty the visible scrollbar
scrollBar.valueProperty().bindBidirectional(scrollBar1.valueProperty());
scrollBar.valueProperty().bindBidirectional(scrollBar2.valueProperty());
}
/*
* This method must be called in Application.start() after the stage is shown,
* because the hidden scrollbars exist only when the tables are rendered
*/
public void setScrollBarBinding() {
bindScrollBars(this.tableLeft, this.tableRight, this.scrollBar, Orientation.VERTICAL);
}
Ahora tiene que llamar a la unión de la aplicación después se muestra el escenario y las mesas sean impuestos:
// Application
private MyController controller;
@Override
public void start(Stage primaryStage) {
try {
FXMLLoader fxmlLoader = new FXMLLoader(SalesApp.class.getResource("scene.fxml"));
BorderPane root = (BorderPane) fxmlLoader.load();;
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("app.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
controller = (MyController) fxmlLoader.getController();
controller.setScrollBarBinding();
} catch(Exception e) {
e.printStackTrace();
}
}
Ahora las tablas deben desplazarse de forma sincrónica a través del ratón, tecla o barra de desplazamiento.
Diviértete, Olaf
- 1. GWT modo alojado fuera de sincronía
- 2. Concat dos cadenas juntas
- 3. ¿Agregar dos variables juntas?
- 4. iPhone: cómo usar UITableViewCell en dos vistas de tabla
- 5. Qt conectar dos señales juntas utilizando QueuedConnection
- 6. Hacer que las pestañas de ActionBar se desplacen cuando se alcanza el límite, en lugar de crear una lista desplegable
- 7. Emacs se desplacen más allá del extremo de tampón
- 8. ¿Cómo se suman varias consultas SQL juntas?
- 9. Desplazamiento de varias cajas de lista de Tkinter juntas
- 10. ¿Cómo evitar que Flask se inicialice dos veces en el modo de depuración?
- 11. Sincronizar la posición de dos vistas ScrollView
- 12. ¿Cómo conseguir que la CSS de la tabla y la propiedad del borde funcionen juntas?
- 13. Django - dos vistas, una página
- 14. Enlazando listas en cf9
- 15. Mantener elasticsearch y la base de datos en sincronía
- 16. Enlazando métodos C++ en OSX?
- 17. Agregar más de dos vistas a ViewSwitcher
- 18. Ordene dos listas <T> juntas como una sola?
- 19. ¿requerirá_unce e include_once juntas incluirán el archivo dos veces?
- 20. Three.js - une dos formas juntas como una sola?
- 21. HSQLDB - Cambiar el modo de tabla
- 22. ¿Cómo se manejan las opciones que no se pueden usar juntas (usando OptionParser)?
- 23. cómo reemplazar varias cadenas juntas en Oracle
- 24. UIGestureRecognizer que bloquea la vista de tabla que se desplaza
- 25. ¿Cómo administrar 2 vistas de tabla en 1 viewController?
- 26. PHP: Agregar matrices juntas
- 27. toques de Desactivar el fondo UIView modo que los botones de vistas inferiores se puede hacer clic
- 28. Desplazamiento simultáneo de dos UITableViews
- 29. Cosiendo fotos juntas
- 30. Repetir encabezados de tabla en modo de impresión
Gracias por tu colaboración. ¿Cuál es la costumbre de aceptar respuestas negativas? No tengo idea si realmente es imposible o no, y probarlo así es seguramente imposible. Esperará al menos seis días más. –