2012-02-08 4 views
3

У меня есть JList и зарегистрирован обработчик выбора (ListSelectionListener). Теперь мне нужно выбрать предыдущий выбранный элемент/индекс.JList: предыдущий выбранный элемент

До сих пор я сохраняю последний выбранный элемент самостоятельно. Есть ли лучший способ сделать это? Другими словами: Есть ли метод/лучшая практика, которую я пропустил все годы ?!

+2

* «Мне нужно, чтобы предыдущий выбранный пункт/индекс». * Почему? –

+3

«Я сохраняю последний выбранный элемент самостоятельно» - это путь: он, безусловно, имеет некоторый смысл в области данных, на данный момент устанавливая его там, где у домена есть knowlegde :-) – kleopatra

+0

@Andrew Thompson: Funny Question ! Выбранный элемент имеет некоторые поля, которые могут быть изменены (другие записи в диалоговом окне). Если пользователь выбирает новый элемент. Данные должны быть сохранены в последнем элементе. –

ответ

9

Один из моего списка является одним выбор только. как говорит клепатра. Данные о событиях здесь не помогают.

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

Поскольку Клеопатра предложил вам провести дополнительную проверку. Что-то вроде:

public void valueChanged(ListSelectionEvent e) 
{ 
    JList list = (JList)e.getSource(); 
    int selected = list.getSelectedIndex(); 
    int previous = selected == e.getFirstIndex() ? e.getLastIndex() : e.getFirstIndex(); 

    System.out.println(); 
    System.out.println("Selected:" + selected); 
    System.out.println("Previous:" + previous); 
} 
+0

Хмм выглядит немного неудобно для меня, но кажется подходящим решением. (Для режима Single-Selection) Тем не менее, я думаю, что Java Guys at Oracle должны работать над этим. –

+0

Ах! Спасибо. Я думал, что e.getFirstIndex() == list.getSelectedIndex(), но это не тот случай! API не совсем ясно, что должно быть первым/последним. – mikesjawnbit

0

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

customList.addListSelectionListener(new ListSelectionListener() { 

     @Override 
     public void valueChanged(ListSelectionEvent arg0) { 
      // TODO Auto-generated method stub 

         //Previous Selected Item index will be obtained by arg0.getFirstIndex() 
         // Similarly Currently Selected Item index will be obtained by this method arg0.getLastIndex() 



     } 
    }); 
+3

Это неверно - первые/последние являются _границами_ диапазона, в котором произошло изменение. Только для одного режима выбора _ и_ хорошая реализация модели (aka: она поддерживает диапазон уведомлений как можно меньше), один из них - старый, а другой - новый, но вы не можете знать, что есть (не без дальнейшей проверки их статус выбора :) – kleopatra

+0

Я думаю, что он будет отлично работать в одной модели выбора. Потому что он даст последний элемент и текущий выбранный элемент –

+0

нет, это не тот случай (прочитайте api doc и/или напишите и запустите небольшой пример) – kleopatra

 Смежные вопросы

  • Нет связанных вопросов^_^