JavaFX中getSelectionModel()类型转换问题:获取ListView选中项的id_lekarza
解决JavaFX ListView选中项类型转换错误问题
嘿,咱们来搞定你碰到这个Object cannot be converted to Lekarz的错误!其实问题根源很明确,咱们一步步来修复:
核心问题
你的ListView没指定泛型类型,默认情况下它的getSelectedItem()返回的是Object类型,编译器自然没法直接把它转成你的Lekarz对象。这是最关键的点!
分步修复方案
给ListView加上泛型约束
- 如果你是用FXML写的界面,在FXML里给ListView指定类型:
记得把<ListView fx:id="viewlekarz" fx:type="你的包路径.Lekarz"/>你的包路径换成Lekarz类实际所在的包,比如com.example.medicalapp.Lekarz。 - 如果是纯Java代码创建ListView,直接声明泛型:
ListView<Lekarz> viewlekarz = new ListView<>();
- 如果你是用FXML写的界面,在FXML里给ListView指定类型:
修修你的Lekarz类
你给的Lekarz类有几个小坑,不填的话就算解决了类型问题,拿id也会出问题:- 首先得把成员变量声明出来啊!比如:
class Lekarz { private int id_lekarza; // 假设id是int,你要是用String就改类型 private String imie; private String nazwisko; private String pesel; // 原来的构造函数id赋值错了!改成这样(如果需要手动传id的话) public Lekarz(int id_lekarza, String imie, String nazwisko, String pesel) { this.id_lekarza = id_lekarza; this.imie = imie; this.nazwisko = nazwisko; this.pesel = pesel; } public Lekarz(){}; // 必须要有这个getter!不然你拿不到id_lekarza public int getId_lekarza() { return id_lekarza; } // 其他属性的getter按需加就行,Hibernate映射的时候可能也需要 public String getImie() { return imie; } public String getNazwisko() { return nazwisko; } public String getPesel() { return pesel; } }
另外你用Hibernate的话,记得给
id_lekarza加注解,比如@Id和@GeneratedValue,让Hibernate能正确生成和管理这个主键id。- 首先得把成员变量声明出来啊!比如:
简化Controller里的事件代码
泛型加上之后,getSelectedItem()直接返回Lekarz,不用强转,还能删掉多余的对象初始化:dellekarz.setOnAction((ActionEvent event)->{ Lekarz selectedLekarz = viewlekarz.getSelectionModel().getSelectedItem(); if(selectedLekarz != null){ int id = selectedLekarz.getId_lekarza(); // 这里就可以用这个id做你想做的事啦,比如调用Hibernate删除操作 } });
这样调整完,你的代码应该就能正常运行,不会再出类型转换的错误了!
内容的提问来源于stack exchange,提问作者conter34
相关产品推荐
相关产品推荐

