java - 从另一个窗口javafx设置TextField的值

标签 java javafx

我想填写此字段,当我转到下一个屏幕时,您将看到我刚刚完成的内容。我怎样才能做到这一点?他们是新来的,我不知道该怎么办。谢谢!

enter image description here

@FXML private var tempId: TextField? = null
@FXML private var btnNext: Button? = null

@FXML
fun onNextClicked(event: ActionEvent?) {

    val loader = FXMLLoader(this.javaClass.classLoader.getResource("layouts/configure.fxml"))
    loader.resources = ResourceBundle.getBundle("lang", Locale(PreferencesHandler.getInstance().language))

    val mainWindowRoot = loader.load<Any>()
    (event?.source as Node).scene.root = mainWindowRoot as Parent
}

最佳答案

简单的答案是获取与“ layouts / configure.fxml”关联的控制器,并将文本字段值传递给它。

假设您的控制器是ConfigureController,则可以执行以下操作:

fun onNextClicked(event: ActionEvent?) {

    val loader = FXMLLoader(this.javaClass.classLoader.getResource("layouts/configure.fxml"))
    loader.resources = ResourceBundle.getBundle("lang", Locale(PreferencesHandler.getInstance().language))

    val controller = loader.controller as ConfigureController
    controller.tempIdText = tempId?.text

    val mainWindowRoot = loader.load<Any>()
    (event?.source as Node).scene.root = mainWindowRoot as Parent
}



我不确定这是否是使用kotlin访问控制器的正确语法。我将TornadoFX与kotlin一起使用,后者使用不同的机制来加载所谓的视图。我在这里发布的最新答案中提供了一个如何从Java访问控制器的示例:How should I externally call a method contained in the "Main" class in JavaFX?

对于这样的应用程序,长的答案是使用数据模型。数据模型是一个或多个类,它们独立于GUI保留数据。 fxml控制器都可以通过注入,单例等方式访问此模型,并且可以从不同的fxml控制器读取和修改数据。例如,在onNextClicked函数中,您可以将文本从tempId写入模型,然后在ConfigureController中读取模型。较长的答案是在数据模型中使用可观察的属性,并将这些属性绑定到GUI元素,以使数据模型和GUI保持同步。

关于java - 从另一个窗口javafx设置TextField的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62169598/

相关文章:

java循环执行多个sql查询

java - JavaFX 中的聊天通知(如 Skype)

java - 如何在 eclipse mars 2 中运行场景生成器?

java - 能够从不同的类访问文本区域

java - 为什么 JavaFX 中的第二个场景没有显示?

java - JAVAFX 在 12 小时内转换 24 小时制

javafx - 如何确定JavaFX应用程序所需的FXML文件,CSS文件,图像和其他资源的正确路径?

java - 如何根据特定条件获取字符串的特定部分?

java - Apache Beam 中 DoFn 的线程同步

java - 将 InputString 转换为 String 就好像程序没有挂起一样