2016-09-02 35 views
4

私はシーンビルダを使用してGUIを構築しています。私のシーンの大部分には共通の要素が1つあります(iOSタイプのホームボタンが下部にあります)。 このコンポーネントを別のfxmlファイルで定義することが可能かどうかは疑問でした。私が行った研究から、再利用可能なコンポーネントを宣言するための同じプロセスが存在しますが、同じfxmlファイル内にのみ存在します。 この原則をいくつかのfxmlファイルにどのように適用できますか?JavaFX - 再利用可能なFXMLコンポーネント

+3

BorderPaneを使用すると、ボタンが下部に表示され、fxmlファイルの中央だけが変更されます。 – GOXR3PLUS

+0

シンプルで効果的!ありがとう、私はこれについて考えなかった。 –

答えて

0

これは間違いなく別のFXMLファイルを作成して、それに既知の固有のIDを持つノードを追加して、そのノードをIDでアクセスすることで実現できます。難しい部分はどのようにアプリケーション全体をやっていますか?おそらく多くのコントローラで同じ機能を作成していますが、ここでFXMLファイルからボタンを取得する方法があります。

すべてのボタンは同じ動作をしていますか?

Parent root = FXMLLoader.load(getClass().getResource("fileName.fxml")); 

     ObservableList<Node> nodes = root.getChildrenUnmodifiable(); 
     String _id = "testButton"; 
     for (Node node : nodes) { 
      if (node.getId().equals(_id)) { 
       return node; 
      } 

     } 
     return null; 
} 
2

あなたはこのように行うことができます。

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.example.MainController"> 
<children> 
<fx:include fx:id="someId" source="NestedFXML.fxml"/> 
</children> 

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.example.NestedFXMLController"> 
</AnchorPane> 

コントローラクラス:

public class MainController implements Initializable { 

    @FXML 
    private NestedFXMLController someIdController; 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
    // TODO Auto-generated method stub 

    } 
} 
public class NestedFXMLController implements Initializable { 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
    // TODO Auto-generated method stub 

    } 
} 

ニース:ネストされたコントローラは、FXML注釈を介して注入することができます。 フィールド名は、fx:id属性文字列+ "Controller"と一致する必要があります。

関連する問題