对菜单栏和上下文菜单重用相同的FXML声明

时间:2016-09-27 19:04:22

标签: javafx fxml

我在FXML中声明了一个带有一系列菜单项的菜单栏(包含图形,onClick方法链接等)。

现在我正在为表创建一个上下文菜单,并且我想在其中输入"编辑"的所有菜单项。菜单栏的菜单。

在FXML中有这样做的干嘛?

我不喜欢复制菜单项的所有FXML声明,并且必须维护这两组项目。 我知道如果我在Java代码中声明它们,我可以重用这些项目,但我想将所有布局保留在FXML中。

以下是编辑菜单的FXML,我不想复制:

<Menu text="_Edit">
    <MenuItem onAction="#copyRaw" text="Copy _raw log">
        <accelerator>
            <KeyCodeCombination alt="UP" code="C" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
        </accelerator>
        <graphic>
            <Glyph fontFamily="FontAwesome" icon="copy" />
        </graphic>
    </MenuItem>
    <MenuItem onAction="#copyPretty" text="Copy with _columns">
        <accelerator>
            <KeyCodeCombination alt="UP" code="C" control="DOWN" meta="UP" shift="DOWN" shortcut="UP" />
        </accelerator>
        <graphic>
            <Glyph fontFamily="FontAwesome" icon="copy" />
        </graphic>
    </MenuItem>
    <SeparatorMenuItem mnemonicParsing="false" />
    <MenuItem onAction="#selectAll" text="Select _All">
        <accelerator>
            <KeyCodeCombination alt="UP" code="A" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
        </accelerator>
    </MenuItem>
    <MenuItem mnemonicParsing="false" onAction="#unselectAll" text="Unselect All" />
</Menu>

1 个答案:

答案 0 :(得分:0)

我不确定我的想法是否最好,但你应该像这样做:   您可以在资源中创建一个包,其中最常用的元素为按钮,表格,标签等,每个元素分配一个 fx:id ,并将其包含在另一个fxmls中。 例如:

PACKAGE :resource / package / name / utils / Label.fxml

<?import javafx.scene.control.Label?>
<?import javafx.geometry.Insets?>
<Label xmlns:fx="http://javafx.com/fxml"
   fx:id="label" 
   style="-fx-background-color: red;
          -fx-font: bold;
          -fx-font-size: 30px;"
   text="Hello world">
<padding>
    <Insets top="5" left="5" right="5" bottom="5"/>
</padding>
</Label>
<!--Add all your nodes there-->

PACKAGE :resource / package / name / Main.fxml

<GridPane xmlns:fx="http://javafx.com/fxml" alignment="TOP_CENTER" hgap="10" vgap="10">
<fx:include source="Label.fxml"/> <!--There will be displayed all elements from Label.fxml-->
</GridPane>

在您的情况下,您只需为菜单项设置 fx:id ,然后导入另一个fxml。 祝你好运。