2013-07-01 102 views
0

我有兩個列表視圖,我在使用JavaFX項目中表示項目類別。第一個在初始化過程中設置了一個單獨的可觀察列表,並且不會更改。但是,第二個ListView會根據從第一個ListView中選擇哪個項目進行更改。除了一堆其他項目外,所選項目還保存到一個對象以供以後編輯。ListView以編程方式未顯示選定項目

當用戶想要編輯其中一個保存的對象時,我重用了這個相同的fxml文件和控制器。我遇到的問題是,雖然我可以以編程方式顯示第一個列表視圖,其可觀察列表和所選項目,並且還根據保存的項目的catagory1數據字段顯示第二個列表視圖和適當的可觀察列表,但我可以似乎沒有讓它顯示該項目被選中,我也不能在它應該的時候滾動第二個ListView。任何幫助將非常感激!

這裏是我的代碼,這些行動涉及的部分...

首先,這部分是在initialize()部分:

category1ListView.getSelectionModel().select(inventoryItem.getCategory(1)); 

showCategory2(); 

ObservableList items = category2ListView.getItems(); 
int range = items.size(); 

for(int count = 0; count < range; count++){ 
    String item = (String) items.get(count); 
    if(inventoryItem.getCategory(2).matches(item)){ 
     category2ListView.scrollTo(count); 
     category2ListView.getSelectionModel().select(item); 
     category2ListView.getFocusModel().focus(count); 
    } 

而這裏的「showCategory2()」以供參考:

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); 
    } 

etc ...通過我的其他清單。有些列表中只有幾個項目,其他項目有7-15個項目,這比第二個listView中可以查看的項目要多。我不想改變列表視圖的大小以適應最大的列表。我寧願滾動適當的。

注:我已經扔在像代碼的一些測試位:

System.out.println("Selected item: " 
+ category2ListView.getSelectionModel().getSelectedItem()); 

這表明先前選擇合適的項目......但第二列表視圖本身並不表示選擇哪個項目,它也不應該滾動到正確的項目。

任何想法?

編輯:經過我的代碼的一些測試後,我發現問題似乎只有當我也使用ListView.scrollTo()方法時纔會發生。如果我從代碼中刪除scrollTo方法,則列表視圖將正確顯示並突出顯示所選項目。

然而,這是相當不方便的,因爲它意味着我有比我的listView的大小更長的任何列表都不會向下滾動到所選項目。

+0

針對javafx-jira中的列表視圖提出問題 –

+0

所以......這是否意味着這是一個錯誤?有沒有其他人得到這些相同的結果? – Aaron

+0

昨天我用javafx-jira提交了一個問題,但還沒有看到有關它的任何評論。通常需要幾天的時間才能收到答覆? – Aaron

回答

1

嘗試下一編碼

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); 
       } 
      } 
     } 

對我來說,它的工作,但我使用JavaFX的8

現在它的固定。

相關問題