JavaFX:ObservableList,ClassCastException:A不能强制转换为B
我正在尝试用JavaFX创建GUI。我有一个列表视图,我想用来显示一些数据。我想使用两种可能的数据集,我们称之为汽车和自行车。当我按下相应的按钮时,我想加载我需要的数据。到目前为止,我的控制器类如下所示:JavaFX:ObservableList,ClassCastException:A不能强制转换为B,java,listview,javafx,Java,Listview,Javafx,我正在尝试用JavaFX创建GUI。我有一个列表视图,我想用来显示一些数据。我想使用两种可能的数据集,我们称之为汽车和自行车。当我按下相应的按钮时,我想加载我需要的数据。到目前为止,我的控制器类如下所示: import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.Scene; import javaf
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.util.Callback;
import java.util.List;
public class FXMLController {
@FXML
ListView lv_list;
@FXML
Button button_cars;
@FXML
Button button_bikes;
List<Cars> cList;
List<Bikes> bList;
Server serv;
private ObservableList observableList = FXCollections.observableArrayList();
public void initScene szene) {
/* initializes serv so it properly yields data */
}
public void listAllCars() {
cList = serv.getAllCars();
updateCarList();
}
private void updateCarList() {
observableList.setAll(cList);
lv_list.setItems(observableList);
lv_list.setCellFactory(new Callback<ListView<Cars>, ListCell<Cars>>() {
@Override
public ListCell<Cars> call(ListView<Cars> listView) {
return new ListViewElemCars(); // creates stuff to populate the list
}
});
}
public void listAllBikes() {
bList = serv.getAllBikes();
updateBikeList();
}
private void updateBikeList() {
observableList.setAll(bList);
lv_list.setItems(observableList);
lv_list.setCellFactory(new Callback<ListView<Bikes>, ListCell<Bikes>>() {
@Override
public ListCell<Bikes> call (ListView<Bikes> listView) {
return new ListViewElemBikes(); //same as with cars
}
});
}
}
我想这是由于updateCarList/updateBikeList方法中未经检查的调用造成的,但我在这里真的不知所措。我想用一个ListView来做这些事情,但我真的不明白这里出了什么问题。我在这里遗漏了什么?您使用由
cellFactory返回的单元格中的具体类型。当新项目类型添加到不打算显示新类型项目的单元格中时,列表视图将重用单元格,从而导致出现ClassCastException
即使是以下方法似乎也不起作用:
清除项目
列表
更换cellFactory
调用refresh()
添加新的项目
这意味着您必须使用能够处理所有项目类型的单元格,或者通过替换整个列表视图
可以发布有关异常来源行的更多信息吗?也许是几行完整的stacktrace?
Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: Cars cannot be cast to Bikes