2012-08-25 26 views
8

首先,我是一個很長時間的Java/Swing開發人員。我最近安裝了JavaFX 2.2來玩弄。如何在JavaFX中創建調整大小的間隔符?

我正在創建一個相當簡單的應用程序,它的主窗口頂部有一個工具欄,其餘部分的內容也是如此。完成此操作的顯而易見的方法是使用BorderPane,並將ToolBar粘貼到頂部。到現在爲止還挺好。但是,我希望工具欄中的一些控件位於窗口的左邊緣,而另一些位於右邊緣。我無法做到這一點。我可以將一個隱形的間隔物放入工具欄,但我只知道如何給它一個固定的寬度;它在調整窗口大小時不會調整大小。所以我認爲,而不是使用ToolBar對象,我只是使用HBox;它應該相當於一個橫向的Swing Box對象,對吧? Swing Box類有一個createHorizontalGlue()方法插入自動調整大小的間隔。那麼,我無法在JavaFX HBox類中找到等價物。有沒有簡單的方法來做到這一點?

回答

10

我想出瞭如何使用HBox而不是ToolBar來保存控件;關鍵是HBox.setHgrow()方法,該方法允許您設置間隔物對象以增大可用空間。我仍然不知道是否可以使用實際的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

詹姆斯·韋弗的文章[最佳實踐的JavaFX 2.0企業應用程序(http://www.oracle.com /technetwork/articles/java/javafxbest2-1634274.html)演示了在ToolBar中放置一個調整大小的間隔區(稱爲文章中的彈簧)。用於彈簧的靜態HGrow設置與您的答案相同(因爲內部水平ToolBar只是一個HBox)。 – jewelsea

+0

謝謝,jewelsea;這是一個更簡單的解決方案! –

7

我做這種方式:

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

希望我能幫助別人

相關問題