如何在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中将工具栏的项目向右对齐[重复]的主要内容,如果未能解决你的问题,请参考以下文章