Listview 以编程方式选择时,列表视图不显示所选项目

Listview 以编程方式选择时,列表视图不显示所选项目,listview,javafx-2,javafx,Listview,Javafx 2,Javafx,我在JavaFX项目中使用了两个列表视图,它们表示项目的类别。第一个是在初始化期间使用单个可观察列表设置的,并且从不更改。但是,第二个ListView会根据从第一个ListView中选择的项目进行更改。与一组其他项目一起,选定的项目将保存到对象中以供以后编辑 当用户想要编辑他们保存的对象时,我会重用这个相同的fxml文件和控制器。我遇到的问题是,虽然我可以通过编程方式显示第一个列表视图、其可观察列表和所选项目,还可以根据保存的项目的类别1数据字段显示第二个列表视图和相应的可观察列表,但我似乎无法

我在JavaFX项目中使用了两个列表视图,它们表示项目的类别。第一个是在初始化期间使用单个可观察列表设置的,并且从不更改。但是,第二个ListView会根据从第一个ListView中选择的项目进行更改。与一组其他项目一起,选定的项目将保存到对象中以供以后编辑

当用户想要编辑他们保存的对象时,我会重用这个相同的fxml文件和控制器。我遇到的问题是,虽然我可以通过编程方式显示第一个列表视图、其可观察列表和所选项目,还可以根据保存的项目的类别1数据字段显示第二个列表视图和相应的可观察列表,但我似乎无法让它显示项目已被选中,我也不能让它在应该的时候滚动第二个ListView。任何帮助都将不胜感激

下面是我的代码中处理这些操作的部分

首先,这部分在initialize()部分:

其中显示了以前选择的相应项目。。。但是第二个列表视图本身并没有显示选择了哪个项目,也没有在应该选择的时候滚动到正确的项目

有什么想法吗

编辑:在对我的代码进行了一些测试之后,我发现这个问题似乎只有在我同时使用ListView.scrollTo()方法时才会出现。如果从代码中删除scrollTo方法,列表视图将正确显示并高亮显示所选项目

但是,这相当不方便,因为这意味着我拥有的任何超过listView大小的列表都不会向下滚动到所选项目。

请尝试下一个代码

 this.listDirectories.getSelectionModel().clearSelection();
        this.listDirectories.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
        if (this.textToSearch.getText().length() > 0) {
            for (int i = 0; i < this.listDirectories.getItems().size(); i++) {
                SMPBDirectory oneDir = (SMPBDirectory) this.listDirectories.getItems().get(i);
                if (oneDir.name.toLowerCase().contains(this.textToSearch.getText().toLowerCase())) {
//Now magic
                    this.listDirectories.getSelectionModel().select(i);
                    this.listDirectories.getFocusModel().focus(i);
                    this.listDirectories.scrollTo(i);
                }
            }
        }
this.listDirectories.getSelectionModel().clearSelection();
this.listDirectory.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
if(this.textToSearch.getText().length()>0){
对于(int i=0;i
对我来说,这是可行的,但我使用JavaFX8


现在已经修复。

在javafx jiraSo中针对列表视图提交一个问题。。。这是否意味着这是一个bug?还有其他人得到同样的结果吗?我昨天提交了一个关于javafx jira的问题,但还没有看到任何关于它的评论。通常需要几天才能收到回复吗?开发人员实际上很忙。回应可能需要时间。
public void showCategory2(){
    String selectionString = category1ListView.getSelectionModel().getSelectedItem();

    if(selectionString.matches("Art")) {
        category2ListView = new ListView<String>(artList);
    } else if (selectionString.matches("Books")){
        category2ListView = new ListView<String>(booksList);
    } else if (selectionString.matches("Decorative Accessores")){
        category2ListView = new ListView<String>(decorativeAccessoriesList);
    } else if (selectionString.matches("Floor Coverings")){
        category2ListView = new ListView<String>(floorCoveringsList);
    } else if (selectionString.matches("Furniture")){
        category2ListView = new ListView<String>(furnitureList);
    } else if (selectionString.matches("Kitchen & Tabletop")){
        category2ListView = new ListView<String>(kitchenAndTabletopList);
    } else if (selectionString.matches("Lighting")){
        category2ListView = new ListView<String>(lightingList);
    } 
System.out.println("Selected item: " 
+ category2ListView.getSelectionModel().getSelectedItem());
 this.listDirectories.getSelectionModel().clearSelection();
        this.listDirectories.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
        if (this.textToSearch.getText().length() > 0) {
            for (int i = 0; i < this.listDirectories.getItems().size(); i++) {
                SMPBDirectory oneDir = (SMPBDirectory) this.listDirectories.getItems().get(i);
                if (oneDir.name.toLowerCase().contains(this.textToSearch.getText().toLowerCase())) {
//Now magic
                    this.listDirectories.getSelectionModel().select(i);
                    this.listDirectories.getFocusModel().focus(i);
                    this.listDirectories.scrollTo(i);
                }
            }
        }