【问题标题】:Hide the title of a TitledPane in JavaFX 2.2在 JavaFX 2.2 中隐藏 TitledPane 的标题
【发布时间】:2013-07-05 00:17:47
【问题描述】:

TitledPane 有一个标题。以下是其中几个的外观:

标题是“更多..”、“笑脸”和“发送”。我想完全隐藏发送标题,而不仅仅是删除文本“发送”。最终结果应该是这样的:

有可能吗?

【问题讨论】:

  • 您能否澄清一下:“我想完全隐藏发送标题,而不仅仅是删除文本。”你指的是哪个“文本”?
  • 我做到了。现在有意义吗?你看我可以删除箭头,就像我已经做过的那样。如果我取消标题的文本,文本也将被删除。但标题本身将持续存在。所以,我想完全删除它,只留下一个内容窗格,其样式与 Accordions TitledPane 一样。
  • 哈哈,我什至用另一张照片更清楚地说明了这个问题。
  • 可能是......尝试使用Node.lookupAll()方法查找所有节点,即TitlePanes的标题,并将Title-node“Send” maxHeight设置为0?并将 focusTraversable 设置为 false
  • 删除 TitledPane 的标题就像删除 ListView 的列表。你为什么想这么做?为什么不直接使用另一个无标题窗格,例如 StackPane?

标签: javafx-2 javafx accordion visibility titlebar


【解决方案1】:

我将只对第三个内容区域使用标准Pane 而不是TitledPane,并应用相关样式来欺骗JavaFX 设置底部面板的样式,就好像它是TitlePane 的内容区域一样。

粗略地说,您将需要一些类似于此的 FXML 标记:

<VBox styleClass="titled-pane" 
      xmlns:fx="http://javafx.com/fxml/1"  
      xmlns="http://javafx.com/javafx/2.2" >
    <children>
        <TitledPane animated="false" text="untitled">
            <content>
                <AnchorPane minHeight="0.0" 
                            minWidth="0.0" 
                            prefHeight="180.0" 
                            prefWidth="200.0" />
            </content>
        </TitledPane>
        <TitledPane animated="false" text="untitled">
            <content>
                <AnchorPane id="Content" 
                            minHeight="0.0" 
                            minWidth="0.0" 
                            prefHeight="180.0" 
                            prefWidth="200.0" />
            </content>
        </TitledPane>
        <Pane prefHeight="200.0" prefWidth="200.0" styleClass="content">
            <children>
                <Button layoutX="74.0" 
                        layoutY="21.0" 
                        mnemonicParsing="false" 
                        text="Button" />
            </children>
        </Pane>
    </children>
</VBox>

这基本上将三个窗格放置在一个 VBox 中,以便它们正确堆叠并应用一些样式来告诉 JavaFX 如何呈现第三个Pane

为了获得第三个Pane 的正确外观,您需要给它一个“内容”样式类。这是背景Pane 的名称,它是TitledPanes 子结构的一部分,它告诉JavaFX 以与TitledPane 控件相同的方式呈现窗格。

这将无法正常工作,因为实际的 css 定义看起来像这样:

.titled-pane .content { // styles defined here }

这意味着该样式仅适用于样式类为“content”的节点,前提是它们也位于样式类为“titled-pane”的节点内。

解决这个问题的简单方法是给根容器Pane(在这种情况下为VBox)一个“标题窗格”样式类,有效地欺骗JavaFX认为第三个窗格是titledPanes内容区。

这个的输出如下所示:

同时 TitledPanes 折叠:

【讨论】:

  • 哇,您的回答正是我所需要的。如果两个上部标题窗格都折叠起来,我看到您已经成功地使下部窗格向上增长。对我来说这不会发生。然而我的元素也被包裹在一个 VBox 中。我的 VBox 又是 HBox 的第二个孩子。树上还有更多的东西,但我无法改变也认为有/应该有什么要说的,为什么我的应用程序行为与你的不同。所以,当我折叠我的两个标题窗格时,中间有空白,我的下窗格不会去任何地方。你知道为什么会这样吗?
  • 更准确地说,我的下窗格拒绝增长或扩展超过 VBox 总高度的 50%。可以说,窗格位于下半部分。想象一下,如果您的答案中下图中的空白被放在第二个无标题标题和“被黑”窗格之间,而不是像现在这样位于窗口底部。
  • 如果没有看到您的实际布局,很难判断。我已经尝试过嵌套在 HBox 中的示例,并且我同意它确实弄乱了布局。我已经使用了三个容器的首选/最大尺寸值和 VGrow 属性以及 VBox 来修复它,但您需要进行试验以使其适用于您的确切场景。
  • 我通过将下窗格的首选高度绑定到所有可用高度来解决问题。然而,手风琴想要一个正好等于三个标题的首选高度,所以还有剩余空间。我认为这是一个错误并重新设计了我的应用程序以使用三个标题。无论如何,谢谢你所做的一切!
  • +1 这个 7 年前的答案解决了我隐藏完整 TitledPane 的问题,因为通常的托管/可见解决方案似乎不起作用。此外,这可以打开多个窗格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多