更改组合框JAVA FX的图像视图

时间:2017-08-13 07:09:34

标签: java javafx combobox imageview

我正在研究一些项目,我面临的问题是,我有一个组合框和一个imageview,imageviews上的图像根据combox框值的选择而变化,但是我设法实现了一些功能,目前,每当我更改组合框的值时,图像视图都会正确更改,但在第二次更改时,图像视图保持不变。

这是我的代码

 fn.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
        @Override
        public void changed(ObservableValue ov, Object t, Object t1) {
            if (t1 != null) {
                System.out.println("here");
                for (int i = 0; i < Fid.size(); i++) {
                    String getAllFines = "SELECT * FROM fines WHERE fine_id='" + Fid.get(i) + "'";
                    ResultSet rs1 = handler.execQuery(getAllFines);
                    try {
                        if (rs1.next()) {
                            System.out.println("here fine name is " + Fid.get(i));

                            InputStream is = rs1.getBinaryStream("fine_image");
                            BufferedImage imBuff = ImageIO.read(is);
                            image = SwingFXUtils.toFXImage(imBuff, null);
                            imageView.setImage(image);
                        }
                    } catch (SQLException | IOException ex) {
                        Logger.getLogger(UpdateFinesFXMLController.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }

            }
        }
    });

此处fid observablelistid,根据该查询我从数据库中获取图片。

1 个答案:

答案 0 :(得分:0)

不知何故,我设法解决了我的问题,我做了更改,我删除了onChange方法中的循环,并且我从id方法参数中获取了onChange,因为在那个参数上,我有当前项的值,一切顺利,问题在于loop

这是我的决心

 fn.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
        @Override
        public void changed(ObservableValue ov, Object t, Object t1) {
            try {
                System.out.println(t1);
                String getAllFines1 = "SELECT * FROM fines WHERE fine_name='" + t1 + "'";
                ResultSet rs1 = handler.execQuery(getAllFines1);
                while (rs1.next()) {
                    InputStream is = rs1.getBinaryStream("fine_image");
                    BufferedImage imBuff = ImageIO.read(is);
                    image = SwingFXUtils.toFXImage(imBuff, null);
                    imageView.setImage(image);
                }

            } catch (SQLException ex) {
                Logger.getLogger(UpdateFinesFXMLController.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(UpdateFinesFXMLController.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });