2014-09-01 90 views
0

請我一直堅持如何轉換我的存儲圖像從我的 數據庫,並顯示它在javafx imageview中的圖像。從數據庫顯示字節作爲圖像在javafx imageview

以前提出的所有問題都沒有幫到我。 我使用objectdb作爲我的數據庫 我也用FXML建立我的GUI

for (Person p : person) { 
      name.setText(p.getName()); 
      gender.setText(p.getGender()); 

      byte[] byteArray = p.getImage(); 
      image.setImage(new Image(new ByteArrayInputStream(byteArray))); 

} 
+1

所以會發生什麼初始化 ? – 2014-09-01 17:15:35

+0

當我運行我的代碼時,我得到從數據庫返回的名稱和性別,但imageview框保持空白。 – 2014-09-02 06:33:43

回答

2

我將展示使用一個文件選擇保存到數據庫中,並在寫作的圖像文件的詳細步驟目錄(文件夾),並將其顯示在fmxl GUI中的imageview中。

以下下面按鈕事件觸發時,或當你運行你發佈的代碼從控制器

FileChooser choose = new FileChooser(); 
FileChooser.ExtensionFilter extFilterJPG = new FileChooser.ExtensionFilter("JPG files (*.jpg)", "*.JPG"); 
     FileChooser.ExtensionFilter extFilterPNG = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.PNG"); 
     choose.getExtensionFilters().addAll(extFilterJPG, extFilterPNG); 
File file = choose.showOpenDialog(null); 
     try { 
      BufferedImage bufferedImage = ImageIO.read(file); 
      byte[] b; 
      try (ByteArrayOutputStream out = new ByteArrayOutputStream(262144)) { 
       ImageIO.write(bufferedImage, "jpg", out); 
       out.flush(); 
       b = out.toByteArray(); 
      } 
EntityService service = new EntityService(); 
Person p = new Person(); 
      p.setId(UUID.randomUUID().toString()); 
      p.setImage(b); 
      service.putPerson(p); 
} catch (IOException e) { 
      e.printStackTrace(); 
     } 




Person p = service.getPerson(); 
     byte[] byteArray = p.getImage(); 
     ByteArrayInputStream in = new ByteArrayInputStream(byteArray); 
     BufferedImage read = ImageIO.read(in); 
     image.setImage(SwingFXUtils.toFXImage(read, null)); 


String output = "C:\\java\\images\\1.jpg"; 
     try (FileOutputStream fos = new FileOutputStream(output)) { 
      fos.write(byteArray); 
     } catch (FileNotFoundException ex) { 
      System.out.println("FileNotFoundException : " + ex); 
     } catch (IOException ioe) { 
      System.out.println("IOException : " + ioe); 
     }