2016-09-27 4 views
1

バンチメニュー項目(グラフィック、onClickメソッドリンクなどを含む)でメニューバーをFXMLで宣言しました。メニューバーとコンテキストメニューに同じFXML宣言を再利用

テーブルのコンテキストメニューを作成していますが、メニューバーの[編集]メニューのすべてのメニュー項目をそこに配置したいと思います。

FXMLのDRY方法はありますか?

メニュー項目のすべての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> 

答えて

0

私は私のアイデアが最良であることはよく分からないが、uは、このようにそれを行うためにすべきである: あなたは多くの使用された要素がButtons、Tables、Labelsなどのリソースとしてパッケージに作成され、それぞれfx:idが割り当てられ、別のfxmlsに含まれます。 例:

PACKAGE:リソース/パッケージ/名前/ 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:リソース/パッケージ/名前/

<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> 
Main.fxml

あなたの場合は、fx:idをメニュー項目に設定し、他のfxml。 幸運。

+0

ありがとう、私はちょうどここでカスタムコンポーネントを再利用しようとしていない、私はコントローラのメソッドにバインドされた全体の構造を再利用しようとしているので、この例よりも少し複雑です。 – Joffrey

関連する問題