Dado que un enorme AnchorPane
con algunos subnodos es el contenido de un ScrollPane
, ¿cómo puedo desplazarme para hacer visible uno de los subnodos, que están fuera de la ventana gráfica actual?¿Cómo desplazarse para hacer visible un Nodo dentro del contenido de un ScrollPane?
7
A
Respuesta
10
Usted necesita encontrar un valor coordenadas de este nodo interior dentro content
y ajustar ScrollPane
's vValue
y hValue
en consecuencia.
Ver ensureVisible()
método en el lado pequeña aplicación:
public class ScrollPaneEnsureVisible extends Application {
private static final Random random = new Random();
private static void ensureVisible(ScrollPane pane, Node node) {
double width = pane.getContent().getBoundsInLocal().getWidth();
double height = pane.getContent().getBoundsInLocal().getHeight();
double x = node.getBoundsInParent().getMaxX();
double y = node.getBoundsInParent().getMaxY();
// scrolling values range from 0 to 1
pane.setVvalue(y/height);
pane.setHvalue(x/width);
// just for usability
node.requestFocus();
}
@Override
public void start(Stage primaryStage) {
final ScrollPane root = new ScrollPane();
final Pane content = new Pane();
root.setContent(content);
// put 10 buttons at random places with same handler
final EventHandler<ActionEvent> handler = new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
int index = random.nextInt(10);
System.out.println("Moving to button " + index);
ensureVisible(root, content.getChildren().get(index));
}
};
for (int i = 0; i < 10; i++) {
Button btn = new Button("next " + i);
btn.setOnAction(handler);
content.getChildren().add(btn);
btn.relocate(2000 * random.nextDouble(), 2000 * random.nextDouble());
}
Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
// run once to don't search for a first button manually
handler.handle(null);
}
public static void main(String[] args) { launch(); }
}
9
I creó una versión un poco más elegante para este caso. Sin embargo, solo pude probar en el eje y. Espero que ayude
private static void ensureVisible(ScrollPane pane, Node node) {
Bounds viewport = scrollPane.getViewportBounds();
double contentHeight = scrollPane.getContent().localToScene(scrollPane.getContent().getBoundsInLocal()).getHeight();
double nodeMinY = node.localToScene(node.getBoundsInLocal()).getMinY();
double nodeMaxY = node.localToScene(node.getBoundsInLocal()).getMaxY();
double vValueDelta = 0;
double vValueCurrent = scrollPane.getVvalue();
if (nodeMaxY < 0) {
// currently located above (remember, top left is (0,0))
vValueDelta = (nodeMinY - viewport.getHeight())/contentHeight;
} else if (nodeMinY > viewport.getHeight()) {
// currently located below
vValueDelta = (nodeMinY + viewport.getHeight())/contentHeight;
}
scrollPane.setVvalue(vValueCurrent + vValueDelta);
}
Cuestiones relacionadas
- 1. Cómo hacer que un LinearLayout pueda desplazarse
- 2. ¿Cómo desplazarse a un elemento dentro de un div?
- 3. ¿Configurar nodo para que sea visible externamente?
- 4. jQuery: Hacer que un botón sea visible cuando un cuadro de texto tiene contenido
- 5. dynatree - ¿Cómo desplazarse al nodo activo?
- 6. ¿Cómo selecciono un nodo XML en función de su contenido?
- 7. ¿Cómo mantener un ScrollView para desplazarse hacia la parte inferior?
- 8. Obtener el rect visible de un contenido de UIScrollView
- 9. atributo 'contenido' para heredar el valor del nodo
- 10. ¿Cómo hacer un div dentro de un td para estirar?
- 11. ¿Cómo desplazar continuamente contenido dentro de un DIV usando jQuery?
- 12. Contenido del nodo de texto Nokogiri
- 13. ¿Cómo hacer que un div se expanda verticalmente para envolver el contenido dentro de él?
- 14. Creando JTable dentro del nodo de JTree
- 15. rubí Nokogiri contenido XPath get del nodo
- 16. ¿Es posible hacer un efecto de "complemento" al desplazarse?
- 17. libxml2 no puede acercarse contenido del nodo
- 18. iPhone UITableView Agregue contenido en la parte superior sin desplazarse
- 19. ¿Cómo creo un xmlElement del nodo actual de un xmlReader?
- 20. Obtener un rectángulo visible de UIView
- 21. Cómo usar mi trackpad para desplazamiento horizontal de la rueda del mouse en un ScrollPane de Java AWT
- 22. Reemplazar cadena dentro del contenido del archivo
- 23. contenido dentro del archivo zip
- 24. Hacer uitextview desplazarse programáticamente
- 25. Regex para hacer coincidir el contenido del método
- 26. ¿Cómo hacer un TextBox con un botón dentro de WPF?
- 27. ¿Cómo crear un nodo duplicado desde un nodo en Neo4j?
- 28. Obtiene el contenido del nodo XML usando C#
- 29. ¿Cómo se actualiza el contenido de un nodo en un Ext.tree.treePanel?
- 30. cómo insertar un cuadro visible alrededor de un conjunto de contenido en látex?