Javafx 相同的控制器和FXML文件,但只有一个有效。为什么?

Javafx 相同的控制器和FXML文件,但只有一个有效。为什么?,javafx,controller,initialization,scenebuilder,Javafx,Controller,Initialization,Scenebuilder,Tab2和Tab3除了数字2和3外,在各个方面都是相同的,但只有一个功能正常。具体来说,在将主控制器注入每个选项卡时 package controller.tab; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextF

Tab2和Tab3除了数字2和3外,在各个方面都是相同的,但只有一个功能正常。具体来说,在将主控制器注入每个选项卡时

    package controller.tab;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import controller.MainController;

public class Tab2Controller {

    private MainController main;

    @FXML public Label lbl2;
    @FXML private TextField txt2;
    @FXML private Button btn2Save;
    @FXML private Button btn2Load;

    @FXML private void btn2SaveClicked(ActionEvent event) {
        System.out.println("Btn 2 save clicked");       
        lbl2.setText(txt2.getText());
    }

    @FXML private void btn2LoadClicked(ActionEvent event) {
        System.out.println("Btn 2 load clicked");
        lbl2.setText(main.loadLblTextFromTab1());
    }

    public void init(MainController mainController) {
        main = mainController;
        System.out.println("IS 2 ON?");
    }
这是Tab2的fxml文件

    <?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane prefHeight="206.0" prefWidth="226.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.tab.Tab2Controller">
   <children>
      <Label fx:id="lbl2" alignment="CENTER" layoutX="37.0" layoutY="46.0" prefHeight="17.0" prefWidth="152.0" text="Default Tab3 text" />
      <TextField fx:id="txt2" layoutX="26.0" layoutY="78.0" prefHeight="25.0" prefWidth="174.0" />
      <Button fx:id="btn2Save" layoutX="21.0" layoutY="113.0" mnemonicParsing="false" onAction="#btn2SaveClicked" prefHeight="58.0" prefWidth="81.0" text="Save text" />
      <Button fx:id="btn2Load" layoutX="105.0" layoutY="113.0" mnemonicParsing="false" onAction="#btn2LoadClicked" prefHeight="58.0" prefWidth="101.0" text="Load from Tab1" />
   </children>
</AnchorPane>

1.在何处以及如何加载FXML文件?2.您在哪里调用
init()
?还有,如果它们是相同的,那么有两个有什么意义呢?这里一切正常,你在另一个地方犯了一些错误。相同的,因为我试图找出问题所在。其中一个有效,另一个无效。我在post.1中添加了调用init()的主控制器。在何处以及如何加载FXML文件?2.您在哪里调用
init()
?还有,如果它们是相同的,那么有两个有什么意义呢?这里一切正常,你在另一个地方犯了一些错误。相同的,因为我试图找出问题所在。其中一个有效,另一个无效。我在post中添加了调用init()的主控制器。
package controller;

import javafx.fxml.FXML;
import controller.tab.Tab1Controller;
import controller.tab.Tab3Controller;
import controller.tab.Tab4Controller;
import controller.tab.Tab5Controller;

public class MainController {
    @FXML Tab1Controller tab1Controller;
    @FXML Tab3Controller tab3Controller;
    @FXML Tab4Controller tab4Controller;
    @FXML Tab5Controller tab5Controller;

    @FXML public void initialize() {
        System.out.println("Application started");
        tab1Controller.init(this);
        System.out.println("Tab 1 Initialized");
        tab3Controller.init(this);
        System.out.println("Tab 3 Initialized");
        tab4Controller.init(this);
        System.out.println("Tab 4 Initialized");
        tab5Controller.init(this);
        System.out.println("Tab 5 Initialized");
    }

    public String loadLblTextFromTab1() {
        return tab1Controller.lbl1.getText();
    }

    public void setTab3LabelText(String text) {
        tab3Controller.lbl3.setText(text);
    }

    public void updateLogger(String text) {
        tab4Controller.txtArea4.appendText(text + "\n");
    }
}