我知道传递参数有很多线程,但我仍然不明白。
我有Main.fxml
级MainController
级。在这个类中,我创建了变量int x = 5
。然后我点击这个阶段的按钮,用SecondController
创建一个新阶段,我可以修改这个值。在MainController
中是x
值的setter和getter方法。在SecondController
我可以从x
获取MainController
值并进行编辑但最后当我关闭第二阶段时,我尝试使用来自{{1的setter方法的新数字设置此编辑值}}。然后我关闭它并再次以与第一次相同的方式打开它。但我看不到新的编辑值,我再次看到这是默认创建的。
以下是我的MainController
,名为MainController
:
FirstController
这是我的public class FirstController {
private int x = 5;
@FXML
private Label label;
@FXML
void click(ActionEvent event) {
SecondController secondController = new SecondController();
secondController.startSecondController(new Stage());
}
@FXML
public void initialize()
{
label.setText(Integer.toString(x));
}
//constructor
public FirstController() {
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
}
:
SecondController
我认为对此问题的描述足以理解这一点。有谁能举例说明如何实现我的目标?
答案 0 :(得分:0)
我想了很多关于@James_D说的话,我已经完成了我的代码。这是控制器可以在彼此之间进行通信的结果:
FirstController
课程:
public class FirstController {
private IntegerProperty x = new SimpleIntegerProperty();
SecondController secondController;
@FXML
private Label label;
@FXML
void click(ActionEvent event) {
Stage stage = new Stage();
FXMLLoader loader = new FXMLLoader(this.getClass().getResource("Second.fxml"));
try
{
Pane pane = loader.load();
secondController = loader.getController();
secondController.setLocalX(x.getValue());
secondController.setFirstController(this);
Scene scene = new Scene(pane, 300, 300);
stage.setTitle("Second Window");
stage.setScene(scene);
stage.show();
}
catch (IOException e)
{
e.printStackTrace();
}
}
@FXML
public void initialize()
{
label.setText(Integer.toString(x.getValue()));
x.addListener( observable -> {
label.setText(Integer.toString(x.getValue()));
});
}
//constructor
public FirstController() {
x.set(5);
}
public int getX() {
return x.getValue();
}
public void setX(int x) {
this.x.set(x);
}
}
SecondController
从x
改变FirstController
值:
public class SecondController {
@FXML
private TextField testArea;
private FirstController firstController;
private int localX;
public void setFirstController(FirstController firstController) {
this.firstController = firstController;
}
public void setLocalX(int x)
{
localX = x;
testArea.setText(Integer.toString(localX));
}
@FXML
void click(ActionEvent event) {
localX = Integer.parseInt(testArea.getText());
firstController.setX(localX);
}
@FXML
public void initialize()
{
testArea.setText(Integer.toString(localX));
}
}
这样好吗?或者更好地尝试使用afterburner.fx
框架注入?