如何在JavaFX中将工具栏的项目对齐到右侧

时间:2014-02-28 13:28:52

标签: javafx scenebuilder

如何将工具栏中的项目对齐? 所有对齐设置似乎都不起作用。

我正在使用布局设计师。

请帮忙

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>

3 个答案:

答案 0 :(得分: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的样式,如果这样可以达到您想要的布局行为。

答案 1 :(得分: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

答案 2 :(得分:0)

如果您使用HBox而不是Toolbar怎么办?我知道你没有得到工具栏的外观,但很容易使用常规Pane向右移动东西,Hgrow属性设置为ALWAYS作为间隔。在这里(完全黑客),我在一个StackPane中放置了一个Toolbar的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>