0

項目のカテゴリを表す JavaFX プロジェクトで使用している 2 つのリスト ビューがあります。最初のものは、初期化中に単一の監視可能なリストで設定され、変更されることはありません。ただし、2 番目の ListView は、最初の ListView から選択された項目に基づいて変化します。他の多くのアイテムとともに、選択したアイテムは後で編集できるようにオブジェクトに保存されます。

ユーザーが保存したオブジェクトの 1 つを編集する場合は、この同じ fxml ファイルとコントローラーを再利用します。私が抱えている問題は、最初のリスト ビュー、その監視可能なリスト、および選択されたアイテムをプログラムで表示でき、保存されたアイテムの catagory1 データ フィールドに基づいて 2 番目のリスト ビューと適切な監視可能なリストも表示できることです。アイテムが選択されていることを示すようには見えませんし、必要なときに2番目の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);
    } 

など...私のリストの残りを通して。一部のリストには少数のアイテムしか含まれていませんが、他のリストには 7 ~ 15 個のアイテムがあり、これは 2 番目の listView で表示できるものよりも多くなっています。最大のリストに対応するためにリスト ビューのサイズを変更したくありません。むしろ、必要に応じてスクロールしたいと思います。

注: 次のようないくつかのテスト コードを挿入しました。

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

これは、以前に選択された適切なアイテムを示しています...しかし、2番目のリストビュー自体は、どのアイテムが選択されているかを示しておらず、正しいアイテムまでスクロールしていません。

何か案は?

編集:私のコードでいくつかのテストを行った後、 ListView.scrollTo() メソッドも使用した場合にのみ問題が発生するように見えることがわかりました。コードから scrollTo メソッドを削除すると、リスト ビューが正しく表示され、選択した項目が強調表示されます。

ただし、リストビューのサイズよりも長いリストは、選択した項目までスクロールダウンしないため、これはかなり不便です。

4

1 に答える 1