Variables 具有多个FXML文件的变量
我有一个多场景JavaFXML应用程序 基于Angela Caicedo代码 我已将Variables 具有多个FXML文件的变量,variables,javafx,fxml,Variables,Javafx,Fxml,我有一个多场景JavaFXML应用程序 基于Angela Caicedo代码 我已将TextField添加到Scene2.fxml和Scene3.fxml每个场景都有一个文件 它自己的控制器类带有屏幕控制器类,该类使用 Idname,在ScreensFramework类(Main类)中定义的节点screen) 因此,每次单击屏幕(场景)上的按钮,都会触发一个动作事件 然后移到另一个屏幕 myController.setScreen(ScreensFramework.screen2ID); 如
TextField
添加到Scene2.fxml
和Scene3.fxml
每个场景都有一个文件
它自己的控制器
类带有屏幕控制器
类,该类使用
Idname
,在ScreensFramework
类(Main
类)中定义的节点screen
)
因此,每次单击屏幕(场景)上的按钮
,都会触发一个动作事件
然后移到另一个屏幕
myController.setScreen(ScreensFramework.screen2ID);
如果可能的话,我想做的是使用屏幕2上TextField
中的值
并将其转移到Scene3上的文本字段
。我发现除非两个FXML
文件已加载。到目前为止,这是不可能的。这是一个桌面应用程序。
那么,如何创建一个全局变量,并在一个类被创建后具有生命
卸载还是卸载了一个FXML文件?
此时,我不希望数据库完成此任务。
我在VisualBasic6中开发了一个全局变量
可以在整个应用程序中使用 定义模型类:
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());
}
// ...
}
及
阅读并查看是否有帮助。@James_D谢谢,但本主题的所有链接似乎都是预定义的变量,而不是在运行时输入的。这里有一个链接可以工作,但变量是预定义的。创建一个模型类(只是用来保存数据的东西)。您可以首先定义它并将其传递给您需要的任何控制器。然后只需从一个控制器修改它的状态,其他控制器就可以访问该状态。实际上,您不能将所需的数据放入
ScreensController
类中吗?所有控制器都有一个对该实例的引用,因此您在其中放置的任何数据都将由所有控制器共享。@James\u D我将在此处发布代码,因为此站点甚至不适合发布代码。我的问题是在哪里或如何捕获屏幕4上输入的数据并将其传输到屏幕3我确实需要返回到ScreensController,因此在该类中,我将在何处处理该变量并将其传递给正确的控制器在本例中,屏幕3请注意,这与,但适应了安吉拉·凯塞多的框架。在你的评论中,你说“变量是预定义的”:这没有问题;模型可以预定义,您只需在需要时更新其状态即可。@Jame\u谢谢您的帮助,我仍在研究它的工作原理,但代码仍在工作。我用一个FXML文件和一个控制器编写了一个应用程序,其中有6个场景,制作了400 x 300的AnchorPane,并将窗格设置为1200 x 900,因此每个视图都是AnchorPane的大小。我需要发表一篇关于如何使用FXML管理FX应用程序中的组合框的新文章,谢谢dwight
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));
}
// ...
}