【问题标题】:JavaFX : How to call the fxml files and load data into itJavaFX:如何调用 fxml 文件并将数据加载到其中
【发布时间】:2016-03-08 13:27:37
【问题描述】:

我是 JavaFX 的新手,我正在开发一个 JavafX 项目,我想在其中将数据从网络加载到 GridPane。我试图弄清楚如何在 UI 中添加从网络接收到的数据。

我已经创建了一个网格窗格,并且只需要在窗格中加载名称、图像。

我查看了一些资源,但鉴于我对 JavaFX 的了解有限,不知道要修改什么以在窗格中添加数据。

我的代码:

public class AccountController {


    fetchCanvasImagesFromServer.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
            @Override
            public void handle(WorkerStateEvent event) {
                imageObservableList = FXCollections.observableList(fetchCanvasImagesFromServer.getValue());

                for(RestImage image : imageObservableList){
                    if(!(image == null)) {
                        if (!(image.getCanvasImage() == null)) {
                            try {
                                InputStream in = new ByteArrayInputStream(image.getCanvasImage());
                                BufferedImage bImageFromConvert = ImageIO.read(in);
                                Image fxImage = SwingFXUtils.toFXImage(bImageFromConvert,null);

                                if(!(fxImage == null)){
                                    System.out.println("Fx image is not null");
                                }
                            }catch (Exception ignored){}


                        }
                    }
                }
            }
        });
}

这里有来自 Canvas 的数据。现在,这段代码被 LoginController 调用,并且只有在登录后才能检索到这些数据。

public class LoginController {

    @FXML
    private TextField user;
    @FXML private TextField password;
    @FXML private Button loginButton;


    public void initManager(final LoginManager loginManager) {
        loginButton.setOnAction(event -> {
            String sessionID1 = authorize();
            if (sessionID1 != null) {
                loginManager.authenticated();
            }
        });
    }
}

最后,上面的认证方法调用网络方法来检索数据。

网格窗格:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>

<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity"
          prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1"
        fx:controller="Controller.AccountController">
    <columnConstraints>
        <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
        <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
    </columnConstraints>
    <rowConstraints>
        <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
        <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
        <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    </rowConstraints>
</GridPane>

我的问题是,如何在canvas.fxml 中加载 RestImage 对象数据。请告诉我。

【问题讨论】:

    标签: java javafx resttemplate


    【解决方案1】:

    一旦加载了canvas.fxml,您就不会修改FXML,而是修改UI 对象。如果将fx:id="root" 添加到FXML 中的GridPane,则可以在AccountController 中有一个字段@FXML GridPane root;。加载图像后,为每个图像创建一个 ImageView 并附加到根目录:

    root.add(myImageView, columnNumber, rowNumber);
    

    整个应用程序的设计是有问题的,但以上将为您的特定问题提供解决方案。

    【讨论】:

    • 你能告诉我为什么应用程序设计有问题吗?如果您愿意,我可以打包并发送给您我拥有的整个项目。我正在启动 JavaFX,我遇到的主要问题是找到像 Swing/Core-Java 这样的好资源。
    • 我可能很快就做出了判断,但通常在使用 JavaFX 及其 MVC 模式时,会将任何与逻辑相关的代码隔离到域模型中,从而使控制器尽可能干净。显然,需要检查整个系统才能提供更好的反馈。如果您有进一步的兴趣,我会做一些类似的 JavaFX 教程。我不会宣传任何链接,您可以通过搜索我的用户名和 JavaFX 找到它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2019-07-14
    • 2014-02-03
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2016-01-07
    相关资源
    最近更新 更多