JavaFXでGUIを作成しようとしています。私はいくつかのデータを表示するために使用したいListViewを持っています。可能性のあるデータセットには2種類ありますが、そのうちの1つは車と自転車です。対応するボタンを押すと、必要なデータをロードします。これまでのコントローラのクラスは次のようになります。JavaFX:ObservableLists、ClassCastException:AはBにキャストできません
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
}
});
}
}
リストのメソッドは、いずれかのボタンを押すたびに発生します。メソッド自体はかなりうまくいきます。私が車のボタンを押すと、すべての車が、彼らが想定している方法で表示されます。同じバイクに行く。しかし、私は次々と押ししようとすると、私は次のエラーを取得する:
Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: Cars cannot be cast to Bikes
私はそれがupdateCarList/updateBikeList方法に未チェックの呼び出しによりだと思うが、私は本当にここに途方に暮れてよ。私は何とか1つのListViewでこのようなことをやりたいのですが、ここで何が間違っているのか分かりません。私はここで何が欠けていますか?
例外が発生している行に関する詳細情報を投稿できますか?たぶん、完全なスタックトレースのいくつかの行ですか? –