【问题标题】:How can I align items of Toolbar to the right in JavaFX [duplicate]如何在JavaFX中将工具栏的项目向右对齐[重复]
【发布时间】:2014-02-28 13:28:51
【问题描述】:

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

我正在使用布局设计器。

请帮忙

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

【问题讨论】:

  • 你在用Scene Builder吗?
  • 是的,我是。我想制作一个带有关闭、最小化和全屏按钮的自定义窗口
  • 你不需要这样做!你需要创建一个Stage,它会被javafx自动处理。
  • 但这是默认的窗口外观
  • 是的,在OS 中打开的所有窗口都必须遵循一些规则!这三个项目的对齐是其中之一!

标签: javafx scenebuilder


【解决方案1】:

这可以通过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设置样式,但你以后喜欢什么,如果这样可以实现你想要的布局行为。

【讨论】:

    【解决方案2】:

    您无法在 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);
    }
    });
    

    这只能在 ToolBar 被绘制到场景上之后完成,因此使用 Platform.runlater。

    【讨论】:

      【解决方案3】:

      如果您使用HBox 而不是Toolbar 会怎样?我知道您看不到工具栏的外观,但是使用常规的 Pane 并将 Hgrow 属性设置为 ALWAYS 作为分隔符很容易将其浮动到右侧。在这里(完全破解),我在 StackPane 中的 HBox 后面放了一个 Toolbar 以使其外观清晰,但您当然可以使用 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>
      

      【讨论】:

      • 查看标记为重复的 Ron,这可能是一个更好的解决方案。
      • 这很酷。我不知道您可以像这样将属性注入 FXML。有没有办法从 Scenebuilder 中添加 HBox.hgrow 属性?我只是把它塞进了代码中,它(显然)工作得很好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 2017-05-21
      • 2020-07-07
      • 2015-08-22
      • 2020-04-18
      相关资源
      最近更新 更多