2016-09-27 54 views
1

我已經在FXML中用一堆菜單項(包含圖形,onClick方法鏈接等)聲明瞭菜單欄。爲菜單欄和上下文菜單重用相同的FXML聲明

現在我正在創建一個表格的上下文菜單,並且我想在那裏放置菜單欄「編輯」菜單中的所有菜單項。

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> 

回答

0

我不知道我的想法是最好的,但ü應該做這樣的: 您可以在資源中使用大多數使用過的元素(如按鈕,表格,標籤等)創建一個包,每個元素分配一個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:資源/包/名稱/ 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。 祝你好運。

+0

謝謝,但我不想在這裏重複使用自定義組件,我試圖重新使用綁定到控制器方法的整個結構,所以它比這個例子稍微複雜一些。 – Joffrey