【发布时间】:2017-05-25 22:32:57
【问题描述】:
我有一个非常简单的应用程序(我只是想了解控制器切换机制)。第一个窗口显示标签和按钮。单击按钮时,将显示另一个带有按钮的窗口。现在,当您单击第二个按钮时,第一个窗口中的标签应该会更改。我在这里阅读了一些帖子,也尝试了这个Java FX change Label text in a previous stage scene,但是没有成功。如果你能用这个简单的例子向我解释一下,也许我能更好地理解控制器的逻辑。这是我的代码,感谢您的帮助:
带有要更改标签的 PrimaryController 和打开新窗口的按钮
public class PrimaryController implements Initializable {
@FXML
private Label label;
@FXML
private Button btnButton;
@Override
public void initialize(URL url, ResourceBundle rb) {
btnButton.setOnAction((event) -> {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("secondaryFXML.fxml"));
Parent root = loader.load();
loader.<SecondaryController>getController().setPrimaryController(this);
Stage stage = new Stage();
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
} catch (IOException ex) {
Logger.getLogger(PrimaryController.class.getName()).log(Level.SEVERE, null, ex);
}
});
}
public void setLabelText(String string){
label.setText(string);
}
}
带有更改标签按钮的辅助控制器
public class SecondaryController implements Initializable {
@FXML
private Button btnChangeLabel;
private PrimaryController primary;
@Override
public void initialize(URL url, ResourceBundle rb) {
btnChangeLabel.setOnAction((event) -> {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("primaryFXML.fxml"));
loader.load();
PrimaryController primaryCtrl = loader.<PrimaryController>getController();
primaryCtrl.setLabelText("eres");
} catch (IOException ex) {
Logger.getLogger(SecondaryController.class.getName()).log(Level.SEVERE, null, ex);
}
});
}
public void setPrimaryController(PrimaryController primary){
this.primary = primary;
}
}
【问题讨论】:
-
您链接的帖子的答案不是已经解释了吗? “但是在
getController之前调用load将无济于事,因为 fxml 只是使用不同的控制器实例再次加载。” -
那我该怎么办?因为我很困惑
-
我正在为主窗口加载控制器,然后我尝试使用 setPrimaryController not load() 方法将该加载的控制器传递到另一个窗口。但是,它似乎不起作用
-
“它似乎不起作用”是什么意思?
-
什么都没有发生,标签没有改变
标签: javafx controller fxml