Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaFX中更改项目时使用ListView的ClassCastException';类型_Java_Listview_Javafx_Classcastexception - Fatal编程技术网

在JavaFX中更改项目时使用ListView的ClassCastException';类型

在JavaFX中更改项目时使用ListView的ClassCastException';类型,java,listview,javafx,classcastexception,Java,Listview,Javafx,Classcastexception,我正在处理应用程序的表示层,在JavaFX的“listview”中遇到了一些问题 在应用程序的GUI中,我打算使用一个listview元素交替(从不同时)显示两个不同对象的列表:类型为“组”的对象和类型为“支出”的对象 当用户想要查看所有组的列表时,调用以下函数(此处简化): private void loadGroups(){ List<Group> groups = getGroups(); ObservableList<Group> ol =

我正在处理应用程序的表示层,在JavaFX的“listview”中遇到了一些问题

在应用程序的GUI中,我打算使用一个listview元素交替(从不同时)显示两个不同对象的列表:类型为“组”的对象和类型为“支出”的对象

当用户想要查看所有组的列表时,调用以下函数(此处简化):

 private void loadGroups(){

     List<Group> groups = getGroups();
     ObservableList<Group> ol = FXCollections.observableList( (List<Group>)groups );
     myListView.setCellFactory( new Callback<ListView<Group>, ListCell<Group>>() {
        @Override
        public ListCell<Group> call(ListView<Group> listView) {
            return new GroupCell();
        }
     });
     myListView.setItems(ol);
     myListView.setOnMouseClicked(...);

 }
如果用户首先查看组列表,然后决定查看支出列表,则会发生以下错误:

  Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: DATA.Model.Expenditure cannot be cast to DATA.Model.Group

我在这里不知所措。细胞工厂和可观察列表正在被正确替换

您是如何声明myListView的

我认为问题在于,当您更换cell factory时,它会立即尝试显示当前项目,当然这些项目的类型是错误的。如果你真的想这样做,试试看

myListView.getItems().clear(); 
在更换电池工厂之前


不过,所有这些看起来都像是一个大黑客。键入了一个
列表视图
,您应该这样使用它。您确实无法在运行时更改其类型。是否有任何理由不简单地切换到不同的
列表视图
(即在
列表视图
列表视图
之间切换,而不仅仅是重新配置单个
列表视图

我认为问题在于,当您更换cell factory时,它会立即尝试显示当前项目,当然这些项目的类型是错误的。如果你真的想这样做,试试看

myListView.getItems().clear(); 
在更换电池工厂之前


不过,所有这些看起来都像是一个大黑客。键入了一个
列表视图
,您应该这样使用它。您确实无法在运行时更改其类型。是否有任何理由不简单地切换到不同的
列表视图
(即在
列表视图
列表视图
之间切换,而不仅仅是重新配置单个
列表视图
)?

myListView链接到fxml文件中描述整个场景的标记。代码如下:“@FXML ListView myListView;”我理解您关于为每个对象使用一个ListView的观点。然而,就视觉效果而言,我希望这两个列表在应用程序窗口中占据相同的空间。我可以使用什么策略来实现这一目标?谢谢@ismarlowe对于泛型类使用原始类型基本上是一个错误,除非您这样做是出于向后兼容性的原因。例如,可以在FXML文件中创建两个列表视图,将它们放在堆栈窗格中,并切换它们的可见性。myListView链接到FXML文件中描述整个场景的标记。代码如下:“@FXML ListView myListView;”我理解您关于为每个对象使用一个ListView的观点。然而,就视觉效果而言,我希望这两个列表在应用程序窗口中占据相同的空间。我可以使用什么策略来实现这一目标?谢谢@ismarlowe对于泛型类使用原始类型基本上是一个错误,除非您这样做是出于向后兼容性的原因。例如,您可以在FXML文件中创建两个列表视图,将它们放在堆栈窗格中,并切换它们的可见性。
myListView.getItems().clear();