我正在研究一些项目,我面临的问题是,我有一个组合框和一个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
observablelist
是id
,根据该查询我从数据库中获取图片。
答案 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);
}
}
});