2012-08-25 13 views
8

Prima di tutto, sono uno sviluppatore Java/Swing da molto tempo. Di recente ho installato JavaFX 2.2 con cui giocare.Come posso creare il ridimensionamento degli spaziatori in JavaFX?

Sto creando un'applicazione abbastanza semplice, la cui finestra principale ha una barra degli strumenti in alto e il contenuto nel resto della finestra. Il modo più ovvio per fare ciò è usare un BorderPane e attaccare un ToolBar nella sezione superiore. Fin qui tutto bene. Tuttavia, vorrei che alcuni dei controlli nella barra degli strumenti si trovassero sul bordo sinistro della finestra e alcuni sul lato destro. Non riesco a trovare alcun modo per farlo. Posso mettere un oggetto spaziatore invisibile nella barra degli strumenti, ma so solo come dargli una larghezza fissa; non viene ridimensionato quando la finestra viene ridimensionata.

Quindi ho pensato che invece di usare un oggetto ToolBar, userò semplicemente un HBox; dovrebbe essere equivalente a un oggetto Swing Box orientato orizzontalmente, giusto? E la classe Swing Box ha un metodo createHorizontalGlue() che inserisce uno spaziatore con ridimensionamento automatico. Bene, non riesco a trovare un equivalente nella classe HBox JavaFX. Non c'è un modo semplice per farlo?

risposta

10

Ho scoperto come farlo utilizzando un HBox anziché uno ToolBar per contenere i controlli; la chiave è il metodo HBox.setHgrow(), che consente di impostare un oggetto spaziatore per crescere per riempire lo spazio disponibile. Non so ancora se è possibile farlo con un'istanza ToolBar effettiva.

/** 
* 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

articolo di James Weaver [Best Practices per JavaFX 2.0 Applicazioni Enterprise] (http://www.oracle.com /technetwork/articles/java/javafxbest2-1634274.html) dimostra l'inserimento di uno spaziatore di ridimensionamento (definito una molla nell'articolo) all'interno di una barra degli strumenti. L'impostazione HGrow statica utilizzata per la molla è la stessa della tua risposta (perché internamente una barra degli strumenti orizzontale è solo un HBox). – jewelsea

+0

Grazie, jewelsea; questa è una soluzione molto più semplice! –

7

lo faccio in questo modo:

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; 
} 

speranza ho potuto fare a qualcuno

Problemi correlati