2016-04-28 2 views
0

Я следующий код выполнить по нажатию кнопки:Java: JList находит только индексы в видимом диапазоне

while(count<listAmount){ 
     tbiCList.setSelectedIndex(0); 

     String item = JList.getSelectedValue(); 

      String update[] = item.split(", "); 

      //this part removed for sake of post 

     remove(item); 
     count++; 
    } 

Примечания:

count начинается как 0, listAmount это количество элементов в JList, и remove() - метод, который у меня есть, который удаляет выбранный элемент.

Все это прекрасно работает и денди, но проблема заключается в том, что он выбирает и удаляет элементы, которые видны при нажатии кнопки, а не элементы, которые находятся за панелью прокрутки. Конечно, я мог бы просто нажать кнопку снова и получить следующий набор элементов, но, я программист, и я хочу простую способ выполнения моей задачи.

UPDATE

я понял, что я устанавливаю listAmount получая LastVisibleIndex();

Мой плохо.

Мой вопрос сейчас: Как получить listAmount каждый раз, когда обновляется команда while?

ОБНОВЛЕНИЕ НА ОБНОВЛЕНИЕ

Потому что я нетерпелив, я, как правило, сделать это очень много, так что, я извиняюсь.

Я понял, как исправить мою проблему. Внутри цикла while я просто добавил +1 к переменной listAmount, а затем, когда он дал мне NullPointerException, я добавил блок try вокруг блока while. Так вот, проблема исправлена.

ответ

1

Вместо того, чтобы использовать getSelectedValue(), чтобы получить один отбор, вы можете удалить оператор while и использовать getSelectedValuesList() вместо этого, чтобы выбрать несколько элементов, а затем перебрать их.

Не забудьте проверить JavaDoc на другие параметры.

Edit для комментариев:

List<String> selectedItems = myJList.getSelectedValuesList(); 
for (int i = 0; i < selectedItems.size(); i++){ 
    String item = selectedItems.get(i); 
    String update[] = item.split(", "); 
    //this part removed for sake of post 
    //.... 
} 
myJList.removeAll(); 
+0

В ответ на ваши изменения: Для того, чтобы получить новый listAmount просто использовать тот же метод, который вы использовали, чтобы получить его в первый раз, но поставить его внутри время цикла? – sorifiend

+0

Проблема в том, что я не могу поместить переменную внутри цикла, потому что цикл while ** использует ** эту переменную. Но я действительно понял, как это сделать. Редактирование вопроса сейчас ... –

+0

И я уверен, что ваш ответ может просто помочь, но проблема в следующем: мне нужно выбирать значения один за другим, назначать их одной строке, поэтому я могу использовать ее для SQL-запроса. Я ценю, что вы пытаетесь помочь! : D –