【问题标题】:changing imageviews on changing combobox JAVA FX在更改组合框 JAVAFX 时更改图像视图
【发布时间】:2017-08-13 07:09:33
【问题描述】:

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

这是我的代码

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

            }
        }
    });

这里fidobservablelistid,基于该查询,我从数据库中获取图像。

【问题讨论】:

  • fn 是什么?发布minimal reproducible example。您可能不需要更改侦听器。
  • fn 是我的组合框
  • 为什么我不需要改变监听器
  • 因为可以绑定。发布minimal reproducible example
  • 为什么你期望Fid的内容在调用之间被修改?您的代码会加载与列表中的 id 相对应的每个图像,并保留最后一个...此外,Image 有一个直接从InputStream 加载的构造函数;应该没必要绕道BufferedImage...

标签: java javafx combobox imageview


【解决方案1】:

不知何故,我设法解决了我的问题,我所做的更改,我删除了onChange 方法中的循环,并且我从onChange 方法参数中得到了id,因为在那个参数上我有当前项目的值,一切顺利,问题出在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);
            }
        }
    });

【讨论】:

    猜你喜欢
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    相关资源
    最近更新 更多