【问题标题】:How to make a resizable SplitPane within a Tab in JavaFX 2.0 (preferably using SceneBuilder and/or FXML)?如何在 JavaFX 2.0 的选项卡中制作可调整大小的 SplitPane(最好使用 SceneBuilder 和/或 FXML)?
【发布时间】:2015-03-11 01:59:45
【问题描述】:

这个问题基本上说明了一切,但需要注意的是,我是一般 GUI 设计的新手,尤其是 JavaFX 的新手。要在 SceneBuilder 中重现,请将 TabPane 拖到场景中,然后将 SplitPane 拖到第一个选项卡的 AnchorPane 中。调整(拖动)SplitPane 的大小以匹配选项卡的大小。如果 SplitPane 不是孩子,这不是问题(到目前为止,我只将它作为 Tab 的(孙)孩子进行了测试)。你会有这样的东西:

预览时,如果您尝试通过拖动来扩大窗口大小,SplitPane 不会调整大小:

这是我从 SceneBuilder 获得的 FXML,使用本文顶部描述的过程,可能有一些没有帮助的小改动:

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

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

<TabPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="UNAVAILABLE" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
  <tabs>
    <Tab text="Untitled Tab 1">
      <content>
        <AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="0.0" minWidth="0.0" prefHeight="386.0" prefWidth="613.0">
               <children>
                  <SplitPane dividerPositions="0.29797979797979796" maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="358.0" prefWidth="600.0">
                    <items>
                      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0" />
                      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="158.0" prefWidth="277.0" />
                    </items>
                  </SplitPane>
               </children></AnchorPane>
      </content>
    </Tab>
    <Tab text="Untitled Tab 2">
      <content>
        <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
      </content>
    </Tab>
  </tabs>
</TabPane>

【问题讨论】:

    标签: user-interface javafx-2 scenebuilder


    【解决方案1】:

    问题在于您的 SplitPane 是 AnchorPane 的子项。如果您在 AnchorPane 下有一些东西,它会锚定到特定的坐标。为了让孩子占据整个区域,您需要将 AnchorPane 的锚点指定为 zero

    <TabPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="UNAVAILABLE" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
      <tabs>
       ....
        <SplitPane dividerPositions="0.29797979797979796" maxHeight="-Infinity" 
                   maxWidth="-Infinity" prefHeight="358.0" prefWidth="600.0"
                   AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
                   AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
       ....
       </tabs>
    </TabPane>
    

    使用场景构建器,您可以通过以下方式分配 AnchorPane 约束:

    1. 选择 AnchorPane 下的子项
    2. 移至右侧面板上的布局部分
    3. 您将看到一个名为 AnchorPane 约束的部分,只需输入四个部分值并保存

    【讨论】:

    • 啊哈,谢谢。我没有看到可以在 SceneBuilder 中设置它的位置,并不是我真的在抱怨;必须手动指定一些属性是完全公平的。
    • 谢谢 - 我实际上是在您最初回答之后尝试过的,因为它看起来很相关。然后我将代码手动编辑到我的实际代码中并且它起作用了。当我使用这种(场景构建器)方法时,我上面发布的示例在某种程度上不太有效,尽管相关部分看起来相同:pastebin.com/raw.php?i=np3KwWKN 我今晚可能会看更多,再次感谢!
    • 但是为什么要打扰AnchorPane呢?
    • @James_D,我使用了 AnchorPane,因为它是在我拖入其他窗格时创建的……我会多读一点。
    • 好的,我找到了罪魁祸首:
    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2017-03-17
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多