You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JavaFX VBox布局中菜单栏无法显示的问题咨询

解决VBox中MenuBar不显示的问题

我一眼就发现了问题的核心——你的菜单栏被直接设置为隐藏状态了!再结合布局细节给你梳理下修复方案:

1. 最关键的问题:MenuBar被标记为不可见

在你的FXML代码里,MenuBar标签携带了visible="false"属性,这直接让菜单栏从界面上消失了。把这个属性删掉,或者改成visible="true",菜单栏就能正常显示了。

2. 移除无效的布局约束

因为MenuBarVBox的子节点,你给它加的AnchorPane.leftAnchorAnchorPane.rightAnchor这些属性完全没用——AnchorPane的布局约束只对直接放在AnchorPane里的节点生效,对VBox的子节点不起作用,直接删掉这些冗余属性就行。

修改后的MenuBar代码片段

<MenuBar fx:id="mbrMainMenu">
    <menus>
        <Menu mnemonicParsing="false" text="File">
            <items>
                <MenuItem fx:id="mnuFileSave" mnemonicParsing="false" text="Save">
                    <accelerator>
                        <KeyCodeCombination alt="UP" code="S" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
                    </accelerator>
                </MenuItem>
                <MenuItem fx:id="mnuFileExit" mnemonicParsing="false" onAction="#mnuFileExit_OnAction" text="Exit">
                    <accelerator>
                        <KeyCodeCombination alt="UP" code="X" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
                    </accelerator>
                </MenuItem>
            </items>
        </Menu>
    </menus>
</MenuBar>

额外优化:让布局更合理

为了让VBox的布局更贴合需求,你可以给子节点设置垂直增长策略:

  • MenuBar加上VBox.vgrow="NEVER",让它固定在顶部不拉伸
  • TabPane加上VBox.vgrow="ALWAYS",让它占满窗口剩余空间

调整后的VBox代码示例:

<VBox layoutY="1.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
    <children>
        <MenuBar fx:id="mbrMainMenu" VBox.vgrow="NEVER">
            <!-- 菜单内容 -->
        </MenuBar>
        <TabPane layoutY="39.0" prefHeight="396.0" prefWidth="588.0" tabClosingPolicy="UNAVAILABLE" VBox.vgrow="ALWAYS">
            <!-- TabPane内容 -->
        </TabPane>
    </children>
</VBox>

做完这些调整后,菜单栏就会正常显示在窗口顶部,TabPane也会自适应剩余空间啦!

内容的提问来源于stack exchange,提问作者nicomp

火山引擎 最新活动