2016-03-08 36 views
0

我是JavaFX的新手,我正在開發一個JavafX項目,我想從網絡中將數據加載到GridPane。我想弄清楚如何在UI中添加從網絡接收到的數據。JavaFX:如何調用fxml文件並將數據加載到其中

我已經創建了一個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){} 


         } 
        } 
       } 
      } 
     }); 
} 

這裏我從畫布的數據。現在,此代碼由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

一旦加載了canvas.fxml,您不要修改FXML,而是修改UI對象。如果您將fx:id="root"添加到GridPaneFXML中,則可以在AccountController中有@FXML GridPane root;的字段。一旦你的圖像加載,爲每個圖像創建ImageView並連接到根:

root.add(myImageView, columnNumber, rowNumber); 

整體應用程序設計值得商榷,但上述會給你的特定問題的解決方案。

+0

你能告訴我爲什麼應用程序設計有問題嗎?如果你願意的話,我可以把你的整個項目打包發給你。我正在啓動JavaFX,並且我遇到的主要問題是找到像Swing/Core-Java那樣的好資源。 –

+1

我可能很快判斷,但通常在使用JavaFX及其MVC模式時,可以將任何與邏輯相關的代碼隔離爲域模型,並儘可能保持控制器的清潔。顯然,需要檢查整個系統才能提供更好的反饋。如果你有更多的興趣,我會做一些類似的JavaFX教程。我不打算宣傳任何鏈接,您可以通過搜索我的用戶名和JavaFX找到它們。 – AlmasB

相關問題