【问题标题】:How to right align a button in Java FX toolbar如何右对齐 Java FX 工具栏中的按钮
【发布时间】:2014-09-13 19:29:08
【问题描述】:

我正在使用 Java FX 场景构建器构建 UI,并且我希望工具栏中的按钮浮动到工具栏的右侧。我尝试更改父级(工具栏)和按钮的节点方向,但似乎都被忽略了。

【问题讨论】:

  • 为什么投反对票!?如果您在评论中留下拒绝投票的原因,那将非常有帮助。我已经非常清楚简洁地阐述了我的问题。这不是一个有效的问题吗?或者你想要我勾选节点方向复选框的屏幕截图:-)
  • 您的原始问题询问如何在工具栏中左对齐,这是默认情况下发生的,因此在编辑之前毫无意义。 Node Orientationalignment 是一个不同的概念,因此在没有进一步的上下文、代码或图形的情况下,将两者混合起来让我感到困惑(不是选中复选框,而是想要的工具栏看起来像什么以及你的当前代码生成)。

标签: java javafx java-8 javafx-8 scenebuilder


【解决方案1】:

添加一个没有内容的窗格,该窗格始终会增长以适应栏中左对齐工具和右对齐工具之间的可用空间。

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

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<ToolBar prefHeight="40.0" prefWidth="318.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
   <Button text="Apples" />
   <Button text="Oranges" />
   <Pane HBox.hgrow="ALWAYS" />
   <Button text="Help" />
</ToolBar>

【讨论】:

  • 谢谢,我期待所涉及的节点的一些属性,但如果添加另一个节点得到想要的结果,那么它也很好。
  • 我猜这在 FX8 中不起作用? HBox.hgrow 不适用于我代码中的窗格。它不能从命名空间中识别出来,并且没有真正做任何事情
  • @jewelsea 你在 JavaFX8 中使用这个有什么运气吗?因为我无法让它工作......似乎 ToolBar 不再从 HBox 继承?
  • @RobinJonsson 我认为您的问题与缺少 &lt;?import javafx.scene.layout.HBox?&gt; 指令有关。在这种情况下,Scene Builder 似乎只是忽略 HBox.hgrow="ALWAYS" 属性并且不显示警告或错误。
  • @sbs 有关 JavaFX 布局的一些信息,试试这个:JavaFX2.0 Layout: A Class Tour,作者是 Amy Fowler。当然也可以查看 Oracle 文档:Working With Layouts in JavaFX。也试试这个layout bounds demo
【解决方案2】:

(已在 Scene Builder 11.0.0 中验证)

一个选项:使用两个 ToolBar 容器,其中包含一个 HBox 容器。将“帮助”按钮放在右侧的工具栏中。将左对齐按钮放在左侧工具栏中。对于左侧工具栏,将 HGrow 设置为 ALWAYS。对于右工具栏,将 HGrow 设置为 NEVER。对于每个 ToolBar,将所有 Sizes 设置为 USE_COMPUTED_SIZE

这里是相关的fxml:

<HBox VBox.vgrow="NEVER">
  <children>
    <ToolBar HBox.hgrow="ALWAYS">
      <items>
        <Button text="Apples" />
        <Button text="Oranges" />
      </items>
    </ToolBar>
    <ToolBar HBox.hgrow="NEVER">
      <items>
        <Button text="Help" />
      </items>
    </ToolBar>
  </children>
</HBox>

这是场景生成器中显示的层次结构:

这是 Scene Builder 中的显示:

【讨论】:

    【解决方案3】:

    如果您可以将您的按钮放置在堆栈窗格中,那么您可以使用 Stackpane 的对齐属性,该属性采用 javafx.geometry.Pos -堆栈窗格中子项的对齐方式。例如在您的情况下:

    <StackPane >
    <Button translateY="-15" translateX="15"  StackPane.alignment="TOP_RIGHT"/>
    </StackPane>
    

    【讨论】:

    • 请写 real 英语 - ur 或 u 不是现有单词 ;) 不,在这里使用 stackpane 不是一个好选择,实际上 stackpane 很少是合适的布局
    【解决方案4】:
    BorderPane mainBorderPane = new BorderPane();     
    BorderPane ToolBorderPane = new BorderPane();     
    ToolBar tBarLeft=new ToolBar();      
    ToolBar tBarRight=new ToolBar();     
    ToolBorderPane.setLeft(tBarLeft);      
    ToolBorderPane.setRight(tBarRight);      
    mainBorderPane.setTop(ToolBorderPane);   
    

    ... ... 为您的左对齐项目添加 tBarLeft 和 您的右对齐项目添加 tBarRight

    【讨论】:

    • 无关:请学习java命名约定并遵守它们。
    【解决方案5】:

    可以通过一些技巧来完成:为工具栏及其所有按钮围绕 Y 轴应用 180 度旋转。

    <ToolBar rotate="-180.0" HBox.hgrow="ALWAYS">
      <items>
        <Button mnemonicParsing="false" rotate="180.0" text="Button">
          <rotationAxis>
            <Point3D y="1.0" />
          </rotationAxis>
        </Button>
      </items>
      <rotationAxis>
        <Point3D y="1.0" />
      </rotationAxis>
    </ToolBar>
    

    【讨论】:

      猜你喜欢
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 2023-03-06
      • 2018-04-16
      • 1970-01-01
      • 2013-02-23
      相关资源
      最近更新 更多