JavaFX ImageView(FXML)不能显示/更改图片

问题描述:

我使用SceneBuilder来设计界面并使用代码here来设置一个简单的FileChooser来打开和查看图片文件。JavaFX ImageView(FXML)不能显示/更改图片

隔离的代码已经过测试并且工作正常,我尝试将它集成到我现有的界面中,并且只是保持失败。没有错误信息,没有。 我已经开始把println围绕命令和一切“工作”。

这里是我的GUI,设计工作至今(我只用一VBox而不是常规的Panel为我所有的努力失败了开始)

<HBox prefHeight="790.0" prefWidth="927.0" style="-fx-background-color: green;"> 
     <children> 
      <VBox prefHeight="200.0" prefWidth="100.0"> 
       <children> 
        <ImageView fx:id="iv_main" fitHeight="473.0" fitWidth="462.0" pickOnBounds="true" preserveRatio="true" /> 
       </children> 
      </VBox> 
      <VBox prefHeight="790.0" prefWidth="236.0"> 
       <!-- And things inside --> 
      </VBox> 
     </children> 
     </HBox> 

并在控制器中的代码 - 初始化没有按” t在此显示该版本中的任何图片。然而,如果我做同样的原始文件它的工作原理:

@FXML 
    private ImageView iv_main; 

    //I know this here looks nasty but I tried the path 1:1 in the 
    //isolated version (even a different project) - but works 100% 
    private String RESJPG = "/home/qohelet/NetBeansProjects/KV/src/main/resources/fxml/ahok.jpg"; 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     /* 
     * In the original file here are two ObservableLists 
     * filled successfully. So I can assume the initialize-method works 
     */ 

     btn_openFolder.setOnAction(btnLoadEventListener);    
     try { 

     FileInputStream input = new FileInputStream(RESJPG); 
     Image image = new Image(input); 
      iv_main = new ImageView(image); 
     } catch (FileNotFoundException|NullPointerException | java.lang.IllegalArgumentException nupo) { 
      System.err.println(RESJPG + " not found"); 
     } 
    } 

事件处理程序的工作是在这个动作事件完全罚款 - 但它无助于ImageView的:

EventHandler<ActionEvent> btnLoadEventListener 
      = new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent t) { 
      System.out.println("Click"); 
      FileChooser fileChooser = new FileChooser(); 

      //Set extension filter 
      FileChooser.ExtensionFilter extFilterJPG = new FileChooser.ExtensionFilter("Bilddateien", "*.JPG", "*.jpg", "*.jpeg", "*.JPEG", "*.PNG", "*.png"); 
      fileChooser.getExtensionFilters().addAll(extFilterJPG); 

      //Show open file dialog 
      File file = fileChooser.showOpenDialog(null); 
      System.out.println("File: " + file.getAbsolutePath()); 
      try { 
       BufferedImage bufferedImage = ImageIO.read(file); 
       Image image = SwingFXUtils.toFXImage(bufferedImage, null); 
       iv_main.setImage(image); 
       iv_main.setVisible(true); //In Swing you sometimes had to do that command - but here regardless if inserted or not, no changes 
      } catch (IOException ex) { 
       Logger.getLogger(FXMLController.class.getName()).log(Level.SEVERE, null, ex); 
      } 

     } 
    }; 

我用完了想法......文件在控制台中正确显示,我保持清洁并构建项目,移动了ImageView,所以没有机会用其他对象覆盖,但结果没有变化......

我甚至试图通过这两种方式来改变图像(一旦开始,然后与FileChooser) - 但没有。

我在做什么错?

(与版本(com.sun.javafx.runtime.VersionInfo.getRuntimeVersion()),我使用的是:8.0.131-B11)

决不初始化被注释@FXML领域。您正在更改在initialize()方法中创建的ImageView的图像,而不是在FXML文件中创建的图像。显然,在FXML文件中创建的文件实际上是在用户界面中显示的文件,并且您在initialize()方法中创建的文件永远不会显示(您从不将它放在任何场景图中);因此您正在更改未显示的图像视图的图像。

变化

iv_main = new ImageView(image); 

iv_main.setImage(image); 
+0

就是这样。非常感谢你,问题解决了 – Qohelet