2012-08-25 13 views
8

Antes que nada, soy un desarrollador de Java/Swing desde hace mucho tiempo. Recientemente instalé JavaFX 2.2 para jugar con.¿Cómo puedo crear espaciadores de cambio de tamaño en JavaFX?

Estoy creando una aplicación bastante simple, cuya ventana principal tiene una barra de herramientas en la parte superior y contenido en el resto de la ventana. La forma obvia de lograr esto es usar un BorderPane, y pegar un ToolBar en la sección superior. Hasta aquí todo bien. Sin embargo, me gustaría que algunos de los controles en la barra de herramientas estén en el borde izquierdo de la ventana, y algunos en el borde derecho. No puedo encontrar ninguna manera de hacer esto. Puedo poner un objeto espaciador invisible en la barra de herramientas, pero solo sé cómo darle un ancho fijo; no cambia de tamaño cuando se cambia el tamaño de la ventana.

Así que pensé que en lugar de usar un objeto ToolBar, solo usaré un HBox; debería ser equivalente a un objeto Swing Box orientado horizontalmente, ¿verdad? Y la clase Swing Box tiene un método createHorizontalGlue() que inserta un espaciador de tamaño automático. Bueno, no puedo encontrar un equivalente en la clase JavaFX HBox. ¿No hay una forma simple de hacer esto?

Respuesta

10

Me di cuenta de cómo hacerlo usando un HBox en lugar de un ToolBar para mantener los controles; la clave es el método HBox.setHgrow(), que le permite configurar un objeto espaciador para que crezca y ocupe el espacio disponible. Todavía no sé si es posible hacer esto con una instancia real de ToolBar.

/** 
* Creates and populates the Node that serves as the window toolbar. 
* 
* @return a newly constructed and populated toolbar component 
*/ 
private Node makeToolbar() { 
    // Auto-sizing spacer 
    Region spacer = new Region(); 
    HBox.setHgrow(spacer, Priority.ALWAYS); 

    // Horizontal box containing toolbar controls 
    HBox box = new HBox(); 
    box.setPadding(new Insets(8)); 
    box.setAlignment(Pos.CENTER); 
    box.getChildren().addAll(openButton, spacer, resizeSlider); 

    // Colored background panel with drop shadow 
    Pane bgRect = new Pane(); 
    bgRect.setStyle("-fx-background-color: #e0e0e0;"); 
    bgRect.setEffect(DropShadowBuilder.create().width(1).build()); 

    // StackPane to hold box and rectangle 
    StackPane stack = new StackPane(); 
    stack.getChildren().addAll(bgRect, box); 

    return stack; 
} 
+3

el artículo de James Weaver [Mejores prácticas para JavaFX 2.0 Aplicaciones de la empresa] (http://www.oracle.com /technetwork/articles/java/javafxbest2-1634274.html) demuestra la colocación de un espaciador de cambio de tamaño (denominado resorte en el artículo) dentro de una barra de herramientas. La configuración estática de HGrow utilizada para el resorte es igual a su respuesta (porque internamente una barra de herramientas horizontal es solo un HBox). – jewelsea

+0

Gracias, jewelsea; ¡esa es una solución mucho más simple! –

7

lo hago de esta manera:

private Node makeFooter(Node left, Node right) { 
     ToolBar footer = new ToolBar(); 
     Region spacer = new Region(); 
     HBox.setHgrow(spacer, Priority.ALWAYS);  
     spacer.setMinWidth(Region.USE_PREF_SIZE); 
     footer.getItems().addAll(left, spacer, right); 
     return footer; 
} 

esperanza pudiera ayudar a alguien

Cuestiones relacionadas