Javafx 相同的控制器和FXML文件,但只有一个有效。为什么?
Tab2和Tab3除了数字2和3外,在各个方面都是相同的,但只有一个功能正常。具体来说,在将主控制器注入每个选项卡时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
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");
}
}