2014-02-28 87 views
3

如何將工具欄的項目對齊到右側? 所有對齊設置似乎不起作用。如何在JavaFX中將工具欄的項目對齊到右側

我正在使用佈局設計器。

請幫

enter image description here

<BorderPane fx:controller="vmanager.ui.Controller" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" 
     prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
<top> 
    <ToolBar prefWidth="200.0" BorderPane.alignment="CENTER_RIGHT"> 
     <items> 
      <Button alignment="CENTER_RIGHT" mnemonicParsing="false" text="_"/> 
      <Button mnemonicParsing="false"/> 
      <Button mnemonicParsing="false" text="X" onAction="#close"/> 
     </items> 
    </ToolBar> 
</top> 

+0

您是否在使用'Scene Builder'? – ItachiUchiha

+0

是的,我是。我想製作一個關閉,最小化和全屏按鈕的自定義窗口 –

+0

您不需要那樣做!您需要創建一個舞臺,它將自動由javafx處理。 – ItachiUchiha

回答

1

不能對齊工具欄項目到右Scenebuilder。爲了達到這個目的,你必須以編程方式進行。下面是我在上面使用的TableView中

Platform.runLater(new Runnable() { 
@Override 
public void run() { 
    btnset.setMinWidth(toolbar.getWidth()/2); 
    btnset.setAlignment(Pos.CENTER_LEFT); 
    recnum.setMinWidth(toolbar.getWidth()/2); 
    recnum.setAlignment(Pos.CENTER_RIGHT); 
} 
}); 

這可以在工具欄已被畫上了現場後才,因此使用Platform.runlater來完成的示例代碼。

enter image description here

4

這是可行的與AnchorPane而不是工具欄:

<BorderPane id="BorderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml"> 
    <top> 
    <AnchorPane prefHeight="50.0"> 
     <children> 
     <Button layoutY="14.0" mnemonicParsing="false" text="Button" AnchorPane.rightAnchor="14.0" /> 
     <Button layoutY="15.0" mnemonicParsing="false" text="Button" AnchorPane.rightAnchor="70.0" /> 
     <Label layoutY="18.0" prefWidth="449.0" text="Label" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="140.0" /> 
     </children> 
    </AnchorPane> 
    </top> 
</BorderPane> 

我還添加了 「窗口標題」 的標籤。如果這樣可以實現所需的佈局行爲,則可以在後面設置AnchorPane的樣式。

0

如果您使用HBox而不是Toolbar,該怎麼辦?我知道你沒有看到工具欄的外觀,但使用常規的Pane將事物浮動到右側很容易,其中將Hgrow屬性設置爲ALWAYS作爲間隔符。在這裏(完全破解),我將一個Toolbar放在StackPane中的HBox背後讓它的外觀通過,但是你可以用css更好地做到這一點。此外,您或者當然需要您的按鈕上的ID以便與他們一起工作。我也沒有提出你的嵌入式控制器定義,所以不要忘記包含它。

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.geometry.Insets?> 
<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.ToolBar?> 
<?import javafx.scene.layout.BorderPane?> 
<?import javafx.scene.layout.HBox?> 
<?import javafx.scene.layout.Pane?> 
<?import javafx.scene.layout.StackPane?> 


<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1"> 
    <top> 
     <StackPane BorderPane.alignment="CENTER"> 
     <BorderPane.margin> 
      <Insets /> 
     </BorderPane.margin> 
     <children> 
      <ToolBar prefHeight="40.0" prefWidth="200.0" /> 
      <HBox prefHeight="40.0" prefWidth="200.0"> 
       <children> 
        <Pane maxWidth="1.7976931348623157E308" HBox.hgrow="ALWAYS" /> 
       <Button mnemonicParsing="false" text="_" /> 
        <Button mnemonicParsing="false" text="O" /> 
        <Button mnemonicParsing="false" text="X" /> 
       </children> 
       <padding> 
        <Insets bottom="6.0" left="6.0" right="6.0" top="6.0" /> 
       </padding> 
      </HBox> 
     </children> 
     </StackPane> 
    </top> 
</BorderPane> 
+2

查看標記爲重複的Ron,這可能是更好的解決方案。 – jewelsea

+0

很酷。我不知道你可以像這樣向FXML注入屬性。有沒有辦法在Scenebuilder中添加HBox.hgrow屬性?我只是把它塞進代碼中,它顯然很好。 – RonSiven

相關問題