我使用firstController获得了first.fxml场景,它是BorderPane,左侧带有一个按钮(birthCert)。
当我单击按钮(birthCert)时,我成功地将second.fxml加载到BorderPane的中心。
@FXML
void birthCert(ActionEvent event) {
Parent root;
try {
root = load(getClass().getResource("second.fxml"));
id_borderPane.setCenter(root);
} catch (IOException e) {
e.printStackTrace();
}
}
second.fxml与secondController类连接,并且具有1个按钮(sendRequest)。单击此按钮后,我将创建firstController的实例,并希望调用方法setscene将Third.fxml加载到borderPane的中心。
third.fxml仅显示消息“您的请求已发送”。
问题是,当我使用firstController实例在类secondController中调用方法setcene时
c.setscene();
public void setscene() {
Parent root;
try {
root = load(getClass().getResource("third.fxml"));
id_borderPane.setCenter(root);
} catch (IOException e) {
e.printStackTrace();
}
}
它不会将Third.fxml加载到BorderPane的中心,只有second.fxml仍然加载,什么也不会发生。
我尝试了控制打印,并测试了root是否为null,但打印工作正常且root不为null,所以我真的不明白是什么原因导致它在BorderPane中心未显示third.fxml
这是整个代码:
package controllers;
import static javafx.fxml.FXMLLoader.load;
import java.io.IOException;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
public class firstController {
@FXML
private BorderPane id_borderPane;
@FXML
void birthCert(ActionEvent event) {
Parent root;
try {
root = load(getClass().getResource("second.fxml"));
id_borderPane.setCenter(root);
} catch (IOException e) {
e.printStackTrace();
}
}
public void setscene() {
Parent root;
try {
root = load(getClass().getResource("third.fxml"));
id_borderPane.setCenter(root);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package controllers;
import java.io.IOException;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.control.TextArea;
import javafx.scene.input.MouseEvent;
public class secondController{
@FXML
void SendRequset(MouseEvent event) throws IOException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("first.fxml"));
loader.load();
UserGUISendReqController c = loader.getController(); // instance of firstController
c.setscene();
}
}
非常感谢您的帮助:)
答案 0 :(得分:0)
您有:
FirstController
|- SecondController
然后在第二个控制器中,单击按钮添加正在执行的第三个控制器
FirstController
|- SecondController
|- new FirstController.setScene()
您应该实例化一个新的FirstController,应该调用SecondController的父级,或者以某种方式将对FirstController的引用传递给第二个Controller。
您要在SecondController上使用getParent或将活动的FirstController传递到SecondController的其他方法,以便在调用它时是正确的。
ps。人们还会对您的命名约定发表评论,而不遵循标准。