簡體   English   中英

JavaFX - 可重用的FXML組件

[英]JavaFX - Reusable FXML component

我正在使用Scene Builder構建GUI,我的大多數場景都有一個共同的元素(底部是iOS類型的主頁按鈕)。 我想知道是否可以在單獨的fxml文件中定義此組件。 根據我進行的研究,存在一個類似的過程,用於聲明可重用組件,但僅在同一個fxml文件中。 我怎么能將這個原則應用於幾個fxml文件?

你可以這樣做:

<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”匹配!

這絕對可以通過創建一個單獨的FXML文件並使用已知的唯一ID添加一個Node,然后通過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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM