我有一个多场景JavaFX FXML应用程序 基于Angela Caicedo代码 https://blogs.oracle.com/acaicedo/entry/managing_multiple_screens_in_javafx1
我在每个场景中添加了TextField
到Scene2.fxml
和Scene3.fxml
个文件
它自己的Controller
类,其ScreensController
类加载HashMap
标识name
,screen
类(ScreensFramework
类)中定义的节点Main
public void addScreen(String name, Node screen) {
screens.put(name, screen);
}
因此,每当您点击屏幕(场景)上的Button
时,您都会点击ActionEvent
并转到另一个屏幕
myController.setScreen(ScreensFramework.screen2ID);
如果可能,我想做的是使用Screen2上TextField
中的值
并将其传递给Scene3上的TextField
。我发现除非两个FXML
加载文件到目前为止这是不可能的。这是一个桌面应用程序。
那么如何创建一个GLOBAL变量并且在一个类之后具有生命的变量
卸载或卸载一个FXML文件?
此时我不希望数据库完成此任务。
我已经在Visual Basic 6中开发了我将声明一个全局变量
可以在整个申请中使用。
答案 0 :(得分:0)
定义模型类:
public class Model {
// Define properties, for example:
private StringProperty text = new SimpleStringProperty();
public StringProperty textProperty() {
return text ;
}
public final String getText() {
return textProperty().get();
}
public final void setText(String text) {
textProperty().set(text);
}
// other properties...
}
在ScreensController
课程中实例化并公开它:
public class ScreensController extends StackPane {
private final Model model = new Model() ;
public Model getModel() {
return model ;
}
// other code as before...
}
现在你可以把事情绑在一起了:
public class ScreenController2 implements ControlledScreen, Initializable {
private ScreensController myController ;
@FXML
private TextField textField ;
// other code...
@Override
public void setScreenParent(ScreensController parent) {
this.myController = parent ;
// Either:
myController.getModel().setText(textField.getText());
textField.textProperty().addListener((obs, oldText, newText) ->
myController.getModel().setText(newText));
// or, depending on the exact behavior you want:
myController.getModel().textProperty()
.bindBidirectional(textField.textProperty());
}
// ...
}
和
public class ScreenController3 implements ControlledScreen, Initializable {
private ScreensController myController ;
@FXML
private TextField textField ;
// other code ...
@Override
public void setScreenParent(ScreensController parent) {
this.myController = parent ;
// Again, replace the next two lines with a bidirectional
// binding if that is the behavior you want
textField.setText(myController.getModel().getText());
myController.getModel().textProperty().addListener((obs, oldText, newText) ->
textField.setText(newText));
}
// ...
}