2013-10-13 1 views
1

Я учусь использовать списки в Java Swing. При написании небольшой программы для понимания работы ListSelectionModel и ListSelectionEvent с использованием JList, я смутился относительно значений, заданных getFirstIndex и getLastIndex.Swing путаница о firstIndex и lastIndex

документация по каждому говорит -

getFirstIndex:

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

и getLastIndex

Возвращает индекс последней строки, чей выбор может быть изменен.

Теперь давайте говорить у меня есть список, как это (с выбором одного диапазона допустимого) -

Element 1 
Element 2 
Element 3 
Element 4 
Element 5 

Первоначально никто не selected.Now, я выбрал 1 и firstIndex дало 0, LastIndex дал 0, верно.

Теперь я, удерживая сдвиг и выбран 3. Здесь firstIndex дал 0 и LastIndex дал 2. LastIndex это хорошо, но у меня есть несколько вопросов, касающихся стоимости firstIndex -

  1. Элемент 1 является все еще выбранный и его выбор не изменился, тогда как firstIndex 0?

  2. Учитывая, что указанная выше точка не должна быть первойIndex равной 1, так как это первая строка, выбор которой изменился (не выбран -> выбран)?

Также в списке показаны элементы, выбранные другим фоном. Теперь, когда я делаю выбор, он также показывает, что элемент с границей? Что это значит?

ответ

2

Если вы выберете Element 1, а затем нажмите и удерживайте клавишу смены и выберите Element 3, у вас есть выбор диапазона от Element 1 до Element 3. JList должен отображать синий фон (индикатор выбора по умолчанию) для Element 1, Element 2 и Element 3.

Таким образом, ListSelectionEvent правильно сообщает, что текущий выбор от индекса 0 до индекса 2. Эти диапазоны индексов представляют элементы в вашем ListModel.

ListSelectionModel, а также ListSelectionEvent сообщают, что текущий выбор, а не выбор, изменяется от предыдущего выбора до текущего.

+0

Хорошо. Но, скажем, я держу этот выбор. Теперь, удерживая Shift нажатой, я выбираю элемент 4. Затем firstIndex возвращает 2 и lastIndex 3. Не должно ли оно 0-3? – Cygnus

+0

Я не могу воспроизвести проблему. Если я выберу первый элемент списка, нажмите и удерживайте клавишу shift и выберите третий элемент списка. Затем выбирают 1 2 3. Если я удерживаю клавишу shift и выбираю 4. выбирают 1 2 3 4. Я попробовал это с помощью этого примера app http://docs.oracle.com/javase/tutorial/uiswing/events/listselectionlistener.html –

+0

Нет, вы меня неправильно поняли. Я говорю, что выборы в порядке - я вижу 1,2,3,4 выбранных. Но firstIndex возвращает 2 и lastIndex 3, а не 0 и 3. – Cygnus

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