如何在JavaFX中将工具栏的项目向右对齐[重复]

Posted

技术标签:

【中文标题】如何在JavaFX中将工具栏的项目向右对齐[重复]【英文标题】:How can I align items of Toolbar to the right in JavaFX [duplicate] 【发布时间】: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 中打开的所有窗口都必须遵循一些规则!这三个项目的对齐是其中之一! 【参考方案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 属性?我只是把它塞进了代码中,它(显然)工作得很好。

以上是关于如何在JavaFX中将工具栏的项目向右对齐[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Bootstrap 5 中将导航项目向右对齐?

如何在 ExtJs 中将标题项向右对齐

如何在JToolbar中将一个按钮对齐?

如何在水平 LinearLayout 中将 ImageButton 向右对齐

JavaFX HBox 对齐

将最后一个子 li 项目向右对齐 [重复]