java—是否可以使用一个javafx控制器在不同的fxml之间移动?

iyfamqjs  于 2021-06-27  发布在  Java
关注(0)|答案(0)|浏览(285)

我的第一个javafx程序/项目有问题。我需要使主fxml场景,我可以插入一些按钮和一些其他fxml的网页到主场景。我想能够通过两个左/右按钮移动到左边或右边的页面,并且可以编辑加载的fxml页面上的“标签”字段。
我试图在主场景的边框区域显示这些页面。我使用javafx controller加载了另一个页面,它可以工作,但是当我尝试在加载的fxml page1上设置“label”字段(名为“counter”)时,我有一个错误,控制器中的这个label字段为null(我为所有页面设置了一个控制器)
我的控制器:

public class Controller implements Initializable {

    @FXML
    private Button Start;

    @FXML
    private BorderPane computer;

    @FXML
    private Label counter;

    int status = 0, next=0;

    @FXML
    void onPressed(ActionEvent event) {
        counter.setText(String.valueOf(next));
        next += 1;
    }

    @FXML
    void startComputer() throws IOException {
        loadPage("page1");
        setStatus(1);
    }

    @FXML
    void right_navigation(ActionEvent event) throws IOException {
        if(getStatus() == 1) {
            loadPage("page2");
            setStatus(2);
        } else if(getStatus() == 2){
            loadPage("page3");
            setStatus(3);
        } else if(getStatus() == 3){
            loadPage("page4");
            setStatus(4);
        } else if(getStatus() == 4){
            loadPage("page1");
            setStatus(1);
        }
    }

    @FXML
    void left_navigation(ActionEvent event) throws IOException {
        if(getStatus() == 4){
            loadPage("page3");
            setStatus(3);
        } else if(getStatus() == 3) {
            loadPage("page2");
            setStatus(2);
        } else if(getStatus() == 2){
            loadPage("page1");
            setStatus(1);
        } else if(getStatus() == 1){
            loadPage("page4");
            setStatus(4);
        }
    }

    private void loadPage(String page) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource(page + ".fxml"));
        computer.setCenter(root);
    }

    private void setStatus(int status){
        this.status = status;
    }

    private int getStatus(){
        return status;
    }

}

fxml主场景:

<?import javafx.scene.image.Image?>
<GridPane alignment="center" hgap="10" vgap="10" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
    <children>
        <AnchorPane prefHeight="600.0" prefWidth="800.0">
            <children>
                <Button fx:id="start" layoutX="520.0" layoutY="540.0" mnemonicParsing="false" onAction="#startComputer" text="Start" />
                <Button fx:id="count" layoutX="620.0" layoutY="540.0" mnemonicParsing="false" onAction="#onPressed" text="Count" />
                <Button fx:id="left" layoutX="150.0" layoutY="540.0" mnemonicParsing="false" onAction="#left_navigation" text="&lt;" />
                <Button fx:id="right" layoutX="180.0" layoutY="540.0" mnemonicParsing="false" onAction="#right_navigation" text="&gt;" />
                <BorderPane fx:id="computer" layoutX="300.0" layoutY="200.0" prefHeight="200.0" prefWidth="180.0" styleClass="comp_display" stylesheets="@../myCss.css" />
            </children>
        </AnchorPane>
    </children>
</GridPane>

borderpane中的一个fxml页:

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="200.0" prefWidth="200.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <top>
   </top>
   <center>
      <AnchorPane prefHeight="186.0" prefWidth="144.0" styleClass="page_screen" stylesheets="@../myCss.css" BorderPane.alignment="CENTER">
         <children>
            <Label fx:id="counter" layoutX="51.0" layoutY="59.0" text="0" />
         </children>
      </AnchorPane>
   </center>
</BorderPane>

我想从控制器设置fxml第1页的“计数器”标签。但是,是否可以通过一个控制器设置这个fxml页面?也许有其他的方法来代替主场景中的加载边界窗格。我将非常感谢你的帮助。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题