JavaFXImageView(FXML)dosen';不要显示/更改图片

JavaFXImageView(FXML)dosen';不要显示/更改图片,java,javafx,javafx-8,fxml,scenebuilder,Java,Javafx,Javafx 8,Fxml,Scenebuilder,我正在使用SceneBuilder设计一个界面,并使用代码设置一个简单的文件选择器来打开和查看图片文件 隔离的代码经过测试,运行良好,我试图将其集成到现有接口中,但始终失败。没有错误消息,什么也没有。 我已经开始在命令周围放置println,一切都“正常” 这是我的GUI,到目前为止设计都很有效(我刚开始使用VBox而不是常规的面板,因为我所有的尝试都失败了) 事件处理程序在该操作事件上工作得非常好-但它对ImageView没有任何作用: EventHandler<ActionEvent&

我正在使用SceneBuilder设计一个界面,并使用代码设置一个简单的文件选择器来打开和查看图片文件

隔离的代码经过测试,运行良好,我试图将其集成到现有接口中,但始终失败。没有错误消息,什么也没有。 我已经开始在命令周围放置
println
,一切都“正常”

这是我的GUI,到目前为止设计都很有效(我刚开始使用
VBox
而不是常规的
面板,因为我所有的尝试都失败了)

事件处理程序在该操作事件上工作得非常好-但它对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);
            }

        }
    };
EventHandler btnLoadEventListener
=新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent t){
System.out.println(“单击”);
FileChooser FileChooser=newfilechooser();
//设置扩展筛选器
FileChooser.ExtensionFilter extFilterJPG=新的FileChooser.ExtensionFilter(“Bilddateien”,“*.JPG”,“*.JPG”,“*.JPG”,“*.JPG”,“*.jpeg”,“*.jpeg”,“*.PNG”,“*.PNG”);
fileChooser.getExtensionFilters().addAll(extFilterJPG);
//显示打开文件对话框
File File=fileChooser.showOpenDialog(null);
System.out.println(“文件:“+File.getAbsolutePath());
试一试{
BuffereImage BuffereImage=ImageIO.read(文件);
Image Image=SwingFXUtils.toFXImage(bufferedImage,null);
iv_main.setImage(图像);
iv_main.setVisible(true);//在Swing中,有时必须执行该命令——但在这里,无论是否插入,都没有更改
}捕获(IOEX异常){
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文件中创建的是在UI中实际显示的,而在
initialize()
方法中创建的则从未显示(您从未将其放在场景图的任何位置);因此,您正在更改未显示的图像视图的图像

改变

iv_main = new ImageView(image);

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);
            }

        }
    };
iv_main = new ImageView(image);
iv_main.setImage(image);