gpt4 book ai didi

java - 在 JavaFX 场景中传递对象的最佳方式是什么

转载 作者:行者123 更新时间:2023-12-01 12:46:01 26 4
gpt4 key购买 nike

(注意,我是java新手)

我在解决javafx场景和类之间传递对象的问题上有点卡住了。

例如,我有一个类,它等待服务器的数据;主类和 2 个 javafx 窗口。让它看起来像这样:

Listener.java。让它在另一个线程上工作。当我们从服务器收到“nelo”时,它意味着什么用户没有登录,然后,我们应该打开登录窗口

// some package
// some imports

public class Listener extends Thread {

public void run() {
System.out.println("[INF] Wait for server...");

while(true) {
handle();
}
}

public void handle()
{
try {
byte[] token = new byte[6];
DataInputStream src = new DataInputStream(in);

src.read(token);
String token_val = new String(token);

switch (token_val) {
case "_nelo_":
System.out.println("[INF] Auth required");
break;
}

} catch (IOException e) {

}
}

}

好吧,没什么奇怪的。只是简单的听力课。但我的麻烦就从这里开始了。我试着解释一下。 (以前,抱歉英语不好,我仍然学习这门语言)

让我们创建登录窗口(想象一下创建了 fxml 文件和 Controller :)):

// some package
// some imports
public class WindowLogin extends Application{

private Stage stage;

@Override
public void start(Stage primaryStage) throws Exception {
stage = new Stage();
try {
URL location = getClass().getResource("../views/WindowLogin.fxml");

FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(location);
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());

Parent root = (Parent) fxmlLoader.load(location.openStream());

Scene scene = new Scene(root);
stage.setScene(scene);

stage.show();
} catch (IOException e) {
e.printStackTrace();
}
}

public void show(){
launch();
}


}

因此,当用户打开应用程序时,客户端将尝试连接到服务器。如果连接成功,则服务器向客户端询问身份验证(显示登录窗口)。接下来 - 用户输入登录名和密码,然后单击“登录”按钮。 (登录窗口显示一些进程指示)。如果身份验证成功 - 隐藏登录信息,否则 - 在窗口中显示一些信息。

因此,我需要从 Listener 访问登录窗口 Controller 。即,正如我之前所写的 - 来自服务器的不同答案 - 显示不同的元素。

如何实现对 LoginWindowController 的访问?

提前致谢

最佳答案

我将为您提供每项任务的基本指导:

连接

如果与服务器连接成功则:

        Platform.runLater(new Runnable() {
public void run() {
try {
WindowLogin login = new WindowLogin();
login.start(new Stage());
} catch (Exception e) {
e.printStackTrace();
}
}
});

登录

错误

您在 WindowController 上设置一个空白标签,如果用户无法进行身份验证,则填充此标签。

登录成功

您可以使用与我之前使用的相同的Platform.runLater,或者您可以使用 stackpane 执行某些操作并更改其顺序(我强烈建议使用 Platform.runLater)。

关于java - 在 JavaFX 场景中传递对象的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24698859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com