...
...

Простые SWT компоненты. Класс List

Класс List предназначен для создания визуального компонента, который отображает столбец из списка строк. Он позволяет скроллировать отображаемый список и предоставляет возможность выбирать одну или несколько строк из списка.

Данный компонент применяется довольно редко, так как позволяет оперировать только строками. Используя таблицы можно получить аналогичную функциональность, при больших возможностях.

Для создания экземпляра класса List используется следующий конструктор:
public List (Composite parent, int style)
Где parent – обязательный родительский компонент (контейнер), а style это один или несколько определяющих параметры создания класса List стилей.

Компонент List. Изображение в визуальном редакторе

Стили

Стили формируют битовую маску по принципу логического "ИЛИ". Для объединения стилей используется символ "|".



СтильОписаниеПримечание

SWT.SINGLEМожет быть выбрана только одна строка.Допустимо указывать только один из стилей SWT.SINGLE или SWT.MULTI
SWT.MULTIПозволяет выбирать несколько строк из списка
SWT.BORDERФлаг для прорисовки окантовки компонента
SWT.H_SCROLLСоздает горизонтальную полосу прокрутки
SWT.V_SCROLLСоздает вертикальную полосу прокрутки


Так как класс List наследуется от класса org.eclipse.swt.widgets.Scrollable, то можно указать на необходимость создания полос прокрутки. Для этого предназначены стили SWT.H_SCROLL и SWT.V_SCROLL создающие соответственно горизонтальную и вертикальную полосы прокрутки.
Базовый класс org.eclipse.swt.widgets.Control предоставляет возможность прорисовки рамки вокруг компонента при указании стиля SWT.BORDER, а так же изменение направления вывода LEFT_TO_RIGHT, RIGHT_TO_LEFT для письма слева направо и справа налево.

Добавление элементов в список

Для добавления строк в конец списка используется метод:
add (String string)
где string - добавляемая строка.
Метод:
add (String string int index)
Добавляет строку в определенную позицию (отсчет начинается от нуля). Строка добавляется перед занимающим указанную позицию элементом (строкой). Остальные элементы сдвигаются на один элемент к концу списка.

Замечание

Индекс для добавления в конец списка можно получить, вызвав метод getItemCount().

Пример 1. Инициализация списка List
/**
* Инициализация списка
*/
private void fillLists() {
lstSource.add("Один");
lstSource.add("Два");
lstSource.add("Три");
lstSource.add("Четыре");
lstSource.add("Пять");
}

Удаление элементов из списка

Для удаления элементов из списка предназначены методы:

remove (int index)
Удаляет строку в определенной позиции index (отсчет начинается от нуля).

remove (int start, int end)
Удаляет строки, начиная с позиции start по end включительно.

remove (int [] indeces)
Удаляет строки с указанными в массиве indeces индексами.

remove (String string)
Производится поиск первого вхождения строки string в список, и если она найдена, то данная строка удаляется из списка.

removeAll ()
Удаляет все элементы списка.

Получение элементов списка

Методы доступа к элементам списка List:

getItem (int index)
Возвращает элемент в указанной позиции index (отсчет начинается от нуля). Если указан неверный индекс, то вызывается исключение.

int getItemCount ()
Возвращает количество элементов в списке List.

String [] getItems ()
Возвращает массив строк списка (может быть пустым).

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

int getTopIndex ()
Возвращает индекс первого видимого элемента в списке List (отсчет начинается от нуля). Индекс элемента может изменяться при скроллировании, добавлении или удалении элементов.

int getFocusIndex ()
Возвращает индекс элемента, на котором установлен фокус курсора (отсчет начинается от нуля). Если фокус не установлен, то возвращается (-1).

int getItemHeight ()
Возвращает высоту элемента списка в пикселях при отображении на экране. Данное значение может быть использовано для вычисления предпочтительного размера списка List.

Настройка значений элементов

Для настройки значений элементов списка List предназначены следующие методы:

setItem (int index, String string)
Вставляет строку string в определенную позицию index (отсчет начинается от нуля). Строка string string замещает значение, занимающего указанную позицию элемента. Данный метод функционально аналогичен последовательному вызову методов remove (index) и add (string, index) по указанному индексу index списка.

setItems (String [] items)
Замещает список элементов List значениями элементов массива items.

void setFont (Font font)
Устанавливает используемый шрифт font.

setTopIndex (int index)
Устанавливает индекс первого видимого элемента в списке List (отсчет начинается от нуля). Индекс элемента может изменяться при скроллировании, добавлении или удалении элементов.

Поиск элементов

Методы поиска элементов списка:
int indexOf (String string)
Возвращает индекс строки string если таковая найдена в списке (поиск начинается от нуля). Если строка string не найдена, то возвращается (-1). int indexOf (String string, int start)
Возвращает индекс найденной строки string. Поиск производится, начиная с позиции start (отсчет начинается от нуля). Если строка string не найдена или указан неверный индекс start, то возвращается (-1).

Выбор элементов списка

В зависимости от выбранного стиля можно выбирать только один (SWT.SINGLE) или несколько строк списка (SWT.MULTI).
Для проверки выбран элемент или нет, используется метод:
isSelected (int index)

Если элемент выбран, возвращает true и false в противном случае.
Для выбора (выделения) элементов списка List предназначены методы:

select (int index)
Выбирает строку в определенной позиции index (отсчет начинается от нуля). Если указан неверный индекс, то операция игнорируются.

select (int start, int end)
Начиная с позиции start по end включительно, выбирает элементы списка. Если указаны неверные значения индексов интервала, то такие элементы игнорируются.

select (int [] indeces)
Выбирает строки с указанными в массиве indeces индексами. Если указаны неверные индексы, то они игнорируются.

selectAll ()
Данный метод выбирает все элементы списка.

Замечание
Методы выбора select(..) не сбрасывают состояние выбора элементов списка, которое было установлено до выполнения операции нового выбора. Так же не происходит скроллирования при выборе не видимых в данный момент элементов.
Если установлен флаг SWT.SINGLE и производится операция над множеством элементов, например selectAll(), то данная операция игнорируется. Пример 2. Выбор элементов из List источника и перенос их в List приемник с использованием массива элементов
/**
* Переносит все элементы списка источника в список List приемника.
*/
private void moveAllToTarget() {
lstSource.selectAll();
moveSelectedToTarget();
}

/**
* Переносит выбранные элементы списка источника в список List приемника.
*/
private void moveSelectedToTarget() {
String[] selectedItems = lstSource.getSelection();
for (int i = 0; i < selectedItems.length; i++) {
lstSource.remove(selectedItems[i]);
lstTarget.add(selectedItems[i]);
}
fireListsChanged();
}

setSelection (int index)
Отменяет выбор всех ранее выбранных элементов и выбирает элемент с индексом index (отсчет начинается от нуля).

setSelection (int [] indices)
Отменяет выбор всех ранее выбранных элементов и выбирает элементы с индексами массива indices (отсчет начинается от нуля).

setSelection (int start, int end)
Отменяет выбор всех ранее выбранных элементов и начиная с позиции start по end включительно, выбирает элементы списка. Если указаны неверные значения индексов интервала, то такие элементы игнорируются.

setSelection (String [] items)
Отменяет выбор всех ранее выбранных элементов и выбирает соответствующие массиву items элементы (отсчет начинается от нуля).
Для получения информации о выбранных элементах предназначены следующие методы:

String[] getSelection ()
Возвращает массив выбранных элементов списка. Выбранные элементы не сортируются. Пустой массив означает, что ничего не выбрано.

int getSelectionCount ()
Возвращает количество выбранных элементов в списке.

int getSelectionIndex ()
Возвращает индекс текущей выбранной строки если на ней установлен фокус курсора (отсчет начинается от нуля). В противном случае возвращается индекс первой выбранной строки в списке. Если ни одного элемента списка не выбрано, то возвращается -1.

Пример 3. Пример контроля выбора элементов списка List
/**
* Настройка доступных действий по состоянию списков источника и приемника.
*/
private void fireListsChanged() {
btnAdd.setEnabled((lstSource.getSelectionIndex() != -1));
btnAddAll.setEnabled(lstSource.getItemCount() > 0);
btnRemove.setEnabled((lstTarget.getSelectionIndex() != -1));
btnRemoveAll.setEnabled(lstTarget.getItemCount() > 0);
}
int [] getSelectionIndices ()
Возвращает массив индексов выбранных элементов списка List.

Пример 4. Выбор элементов из List приемника и перенос их в List источник с использованием массива индексов
private void moveSelectedToSource() {
int[] selectedItems = lstTarget.getSelectionIndices();
for (int i = 0; i < selectedItems.length; i++) {
lstSource.add(lstTarget.getItem(selectedItems[i]));
}
lstTarget.remove(selectedItems);
fireListsChanged();
}

Метод:
showSelection ()
Производит скроллирование элементов списка List до появления на экране первого выбранного элемента.
Для отмены выбора применяются следующие методы:
deselect (int index)
Отменяет выбор строки в определенной позиции index (отсчет начинается от нуля). Если указан неверный индекс или элемент ранее не был выбран, то операция игнорируются.
deselect (int [] indices)
Отменяет выбор элементов с индексами массива индексов indeces. (отсчет начинается от нуля). Элементы с неверными индексами игнорируются. deselect (int start, int end)
Отменяет выбор строк, начиная с позиции start по end включительно. Если указаны неверные значения индексов интервала, то такие элементы игнорируются.
deselectAll ()
Отменяет выбор всех элементов списка List.

Слушатели событий списка List

Слушатели предназначены для фиксации некоторых событий в системе и выполнения адекватных действий в соответствии с типом события.
addSelectionListener(SelectionListener listener)
Добавляет слушатель в коллекцию слушателей, который активизируется при изменении выбора List. Где listerner - одна из возможных реализаций интерфейса обработчика событий:
. widgetSelected - вызывается при изменении выбора (например, при выборе элемента списка при помощи клавиатуры или мыши).
. widgetDefaultSelected - вызывается при выполнении платформо зависимой операции по умолчанию. На большинстве платформ это нажатие кнопки <Entre> или двойной клик мыши.
removeSelectionListener(SelectionListener listener)
Удаляет ранее созданный слушатель listener из коллекции слушателей.

Пример 5. Слушатель, который контролирует изменение состояния выбора элементов списка List
// Добавляем слушатель изменений списка источников
lstSource.addSelectionListener(
new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(
org.eclipse.swt.events.SelectionEvent e) {
fireListsChanged();
}
});

Рисунок 3. Пример тестового приложения выбора элементов List

Текст тестового примера работы с классом List приведен в файле by.berdachuk.swt.simplewidgets.ListSelector.java
Архив демонстрационного проекта можно скачать по адресу сайт

Сергей Бердачук, berdachuk@tut.by, http://forjava.dev.juga.ru

© Компьютерная газета

полезные ссылки
Аренда ноутбуков