JavaFX:如何调用fxml文件并将数据加载到其中

时间:2016-03-08 13:27:38

标签: java javafx resttemplate

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

我已经创建了一个gridpane,只有在窗格中加载的东西是Name,Image。

我检查了一些资源,但鉴于我对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();
            }
        });
    }
}

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

Gridpane:

<?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对象数据。请告诉我。

1 个答案:

答案 0 :(得分:1)

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

root.add(myImageView, columnNumber, rowNumber);

整体应用程序设计值得怀疑,但上述内容将为您提供特定问题的解决方案。