Spec-Zone .ru
спецификации, руководства, описания, API
|
A JList
дарит пользователю группу элементов, выведенных на экран в одном или более столбцах, чтобы выбрать из. У списков может быть много элементов, таким образом, они часто помещаются в области прокрутки.
В дополнение к спискам следующие компоненты Swing представляют многократные выбираемые элементы пользователю: поля комбинированного списка, меню, таблицы, и группы флажков или переключателей. Чтобы вывести на экран иерархические данные, используйте дерево.
Следующие данные показывают два приложения то использование списки. Этот раздел использует эти примеры в качестве основания для обсуждений, которые следуют.
ListDialog (используемый ListDialogRunner) |
ListDemo |
Есть три способа создать модель списка:
DefaultListModel
.AbstractListModel
и реализация getSize
и getElementAt
методы, наследованные от ListModel
интерфейс.Вот код от ListDialog.java
это создает и устанавливает его список:
list = new JList(data); //data has type Object[] list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); list.setLayoutOrientation(JList.HORIZONTAL_WRAP); list.setVisibleRowCount(-1); ... JScrollPane listScroller = new JScrollPane(list); listScroller.setPreferredSize(new Dimension(250, 80));
Код передает массив конструктору списка. Массив переполнен строками, в которых передали от другого объекта. В нашем примере строки, оказывается, имена мальчиков.
Другой JList
конструкторы позволяют Вам инициализировать список от a Vector
или от объекта, который придерживается ListModel
интерфейс. Если Вы инициализируете список с массивом или вектором, конструктор неявно создает модель списка значения по умолчанию. Модель списка значения по умолчанию является неизменной — невозможно добавить, удалить, или заменить элементы в списке. Чтобы создать список, элементы которого могут быть изменены индивидуально, устанавливает модель списка в экземпляр изменчивой модели списка class, такой как экземпляр DefaultListModel
setModel
метод. См. Добавляющие Элементы к и Элементы Удаления от Списка для примера.
Звонок setSelectionMode
определяет, сколько элементов пользователь может выбрать, и должны ли они быть непрерывными; следующий раздел говорит Вам больше о режимах выбора.
Звонок setLayoutOrientation
позволяет списку выводить на экран свои данные в многократных столбцах. Значение JList.HORIZONTAL_WRAP
определяет, что список должен вывести на экран свои элементы слева направо прежде, чем перенестись к новой строке. Другое возможное значение JList.VERTICAL_WRAP
, который определяет, что данные выводятся на экран сверху донизу (как обычно) прежде, чем перенестись к новому столбцу. Следующие данные показывают эти две переносящихся возможности, вместе со значением по умолчанию, JList.VERTICAL
.
HORIZONTAL_WRAP |
VERTICAL_WRAP |
VERTICAL |
В комбинации со звонком setLayoutOrientation
, вызов setVisibleRowCount(-1)
входит в список вывести на экран максимальное количество элементов, возможных в экранном свободном месте. Другое обычное использование setVisibleRowCount
должен определить к области прокрутки списков, сколько строк список предпочитает выводить на экран.
Список использует экземпляр ListSelectionModel
setSelectionMode
метод в списке. Например, оба ListDialog
и ListDemo
установите режим выбора в SINGLE_SELECTION
(константа, определенная ListSelectionModel
) так, чтобы только один элемент в списке мог быть выбран. Следующая таблица описывает три режима выбора списка:
Режим | Описание |
---|---|
SINGLE_SELECTION |
Только один элемент может быть выбран за один раз. Когда пользователь выбирает элемент, любой ранее, что выбранный пункт является невыбранным сначала. |
SINGLE_INTERVAL_SELECTION |
Могут быть выбраны многократные, непрерывные элементы. Когда пользователь начинает новый диапазон выбора, любой ранее, что выбранные пункты являются невыбранными сначала. |
MULTIPLE_INTERVAL_SELECTION |
Значение по умолчанию. Любая комбинация элементов может быть выбрана. Пользователь должен явно отменить выбор элементов. |
Независимо от того, который режим выбора Ваше использование списка, список запускает события выбора списка всякий раз, когда выбор изменяется. Можно обработать эти события, добавляя слушателя выбора списка списка с addListSelectionListener
метод. Слушатель выбора списка должен реализовать один метод: valueChanged
. Вот valueChanged
метод для слушателя в ListDemo
:
public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting() == false) { if (list.getSelectedIndex() == -1) { //No selection, disable fire button. fireButton.setEnabled(false); } else { //Selection, enable the fire button. fireButton.setEnabled(true); } } }
Много событий выбора списка могут быть сгенерированы от единственного пользовательского действия, такого как щелчок мышью. getValueIsAdjusting
возвраты метода true
если пользователь все еще управляет выбором. Эта определенная программа интересуется только окончательным результатом действия пользователя, таким образом, valueChanged
метод делает что-то только если getValueIsAdjusting
возвраты false
.
Поскольку список находится в единственном режиме выбора, этот код может использовать getSelectedIndex
получить индексирование справедливого выбранного пункта. JList
обеспечивает другие методы для установки или получения выбора, когда режим выбора позволяет больше чем одному элементу быть выбранным. Если Вы хотите, можно прислушаться к событиям на модели выбора списка списка, а не в списке непосредственно.
Пример ListDemo, который мы показали ранее, обладает списком, содержание которого может измениться. Можно найти исходный код для ListDemo в ListDemo.java
. Вот код ListDemo, который создает изменчивый объект модели списка, помещает начальные элементы в него, и использует модель списка, чтобы создать список:
listModel = new DefaultListModel(); listModel.addElement("Jane Doe"); listModel.addElement("John Smith"); listModel.addElement("Kathy Green"); list = new JList(listModel);
Эта определенная программа использует экземпляр DefaultListModel
, class обеспечил Swing. Несмотря на имя class, у списка нет a DefaultListModel
если Ваша программа явно не делает это так. Если DefaultListModel
не удовлетворяет Вашим потребностям, можно записать пользовательскую модель списка, которая должна придерживаться ListModel
интерфейс.
Следующий фрагмент кода показывает actionPerformed
метод для слушателя действия зарегистрировался на кнопке Fire. Полужирная строка кода удаляет выбранный пункт в списке. Остающиеся строки в методе отключают кнопку огня, если список теперь пуст, и сделайте другой выбор, если это не.
public void actionPerformed(ActionEvent e) { int index = list.getSelectedIndex(); listModel.remove(index); int size = listModel.getSize(); if (size == 0) { //Nobody's left, disable firing. fireButton.setEnabled(false); } else { //Select an index. if (index == listModel.getSize()) { //removed item in last position index--; } list.setSelectedIndex(index); list.ensureIndexIsVisible(index); } }
Вот actionPerformed
метод для слушателя действия, совместно использованного кнопкой Hire и текстовым полем:
public void actionPerformed(ActionEvent e) { String name = employeeName.getText(); //User did not type in a unique name... if (name.equals("") || alreadyInList(name)) { Toolkit.getDefaultToolkit().beep(); employeeName.requestFocusInWindow(); employeeName.selectAll(); return; } int index = list.getSelectedIndex(); //get selected index if (index == -1) { //no selection, so insert at beginning index = 0; } else { //add after the selected item index++; } listModel.insertElementAt(employeeName.getText(), index); //Reset the text field. employeeName.requestFocusInWindow(); employeeName.setText(""); //Select the new item and make it visible. list.setSelectedIndex(index); list.ensureIndexIsVisible(index); }
Этот код использует модель списка insertElementAt
метод, чтобы вставить новое имя после текущего выбора или, если никакой выбор не существует, в начале списка. Если Вы только хотите добавить до конца списка, можно использовать DefaultListModel
's addElement
метод вместо этого.
Всякий раз, когда элементы добавляются к, удалили из, или изменили в списке, событиях данных списка огней модели списка. Обратитесь к тому, Как Записать Слушателю Данных Списка для информации о прислушивании к этим событиям. Тот раздел содержит пример, который подобен ListDemo
, но добавляет, застегивает то перемещение элементы или вниз в списке.
Список использует объект, названный средством рендеринга ячейки, чтобы вывести на экран каждый из его элементов. Средство рендеринга ячейки значения по умолчанию знает, как вывести на экран строки и значки, и оно выводит на экран Object
s, вызывая toString
. Если Вы хотите изменить путь значки дисплея средства рендеринга значения по умолчанию или строки, или если Вы хотите поведение, отличающееся чем, чем обеспечивают toString
, можно реализовать пользовательское средство рендеринга ячейки. Сделайте эти шаги, чтобы обеспечить пользовательское средство рендеринга ячейки для списка:
ListCellRenderer
интерфейс.setCellRenderer
использование экземпляра как параметр.Мы не обеспечиваем пример списка с пользовательским средством рендеринга ячейки, но у нас действительно есть пример поля комбинированного списка с пользовательским средством рендеринга — и поля комбинированного списка используют тот же самый тип средства рендеринга как списки. См. пример, описанный в Обеспечении Пользовательского Средства рендеринга.
Следующие таблицы приводят обычно используемый JList
конструкторы и методы. Другие методы Вы, наиболее вероятно, вызовете на a JList
объект - те такой как setPreferredSize
то, что его суперклассы обеспечивают. См. API JComponent для таблиц обычно используемых наследованных методов.
Большой частью работы списка управляют другие объекты. Элементами в списке управляет объект модели списка, выбором управляют объект модели выбора списка, и большинство программ, помещенных список в области прокрутки, чтобы обработать прокрутку. По большей части Вы не должны волноваться о моделях потому что JList
создает их по мере необходимости, и Вы взаимодействуете с ними неявно с JList
's методы удобства.
Однако API для того, чтобы использовать списки попадает в эти категории:
Метод или Конструктор | Цель |
---|---|
|
Создайте список с начальными определенными элементами списка. Вторые и третьи конструкторы неявно создают неизменное ListModel ; недопустимо впоследствии изменить переданный - в массиве или Vector . |
|
Набор или получает модель, которая содержит содержание списка. |
|
Установите элементы в списке. Эти методы неявно создают неизменное ListModel . |
Метод | Цель |
---|---|
|
Набор или добирается visibleRowCount свойство. Для a VERTICAL ориентация расположения, это устанавливает или заставляет привилегированное число строк выводить на экран, не требуя прокрутки. Для HORIZONTAL_WRAP или VERTICAL_WRAP ориентации расположения, это определяет, как ячейки переносятся. См. VERTICAL . |
|
Набор или получает способ, которым размечаются ячейки списка. Возможные форматы расположения определяются JList - определенные значения VERTICAL (единственный столбец ячеек; значение по умолчанию), HORIZONTAL_WRAP ("газетный" стиль с контентом, текущим горизонтально тогда вертикально), и VERTICAL_WRAP ("газетный" стиль с контентом, текущим вертикально тогда горизонтально). |
|
Получите индексирование первого или последнего видимого элемента. |
|
Прокрутите так, чтобы указанные индексировали, видимо в пределах области просмотра, в которой находится этот список. |
Метод | Цель |
---|---|
|
Регистр, чтобы получить уведомление об изменениях выбора. |
|
Установите текущий выбор как обозначено. Использовать setSelectionMode установить, какие диапазоны выборов являются приемлемыми. Булев параметр определяет, должен ли список попытаться прокрутить себя так, чтобы выбранный пункт был видим. |
|
Получите информацию о текущем выборе как обозначено. |
|
Набор или получает режим выбора. Приемлемые значения: SINGLE_SELECTION , SINGLE_INTERVAL_SELECTION , или MULTIPLE_INTERVAL_SELECTION (значение по умолчанию), которые определяются в ListSelectionModel . |
|
Набор или добирается, выбираются ли какие-либо элементы. |
|
Определите, индексируют ли указанные, выбирается. |
Класс или Метод | Цель |
---|---|
|
Учитывая начальное значение индекса, переройте список для элемента, который запускается с указанной строки, и возвратитесь, которые индексируют (или-1, если строка не находится). Третий параметр, который определяет направление поиска, может быть также Position.Bias.Forward или Position.Bias.Backward . Например, если у Вас есть список с 6 элементами, getNextMatch("Matisse", 5, javax.swing.text.Position.Bias.Forward) поиски строки "Матисс" в элементе в индексируют 5, тогда (в случае необходимости) в индексируют 0, индексируют 1, и так далее. |
|
Набор или получает свойство, которое определяет, перетаскивают ли автоматический обработку, включается. См. |
Эта таблица показывает примеры то использование JList
и где те примеры описываются.
Пример | Где Описано | Примечания |
---|---|---|
SplitPaneDemo |
Как Использовать Разделенные области | Содержит единственный выбор, неизменный список. |
ListDemo |
Этот раздел | Демонстрирует, как добавить и удалить элементы из списка во времени выполнения. |
ListDialog |
Этот раздел, Как Использовать BoxLayout | Реализует модальное диалоговое окно с единственным списком выбора. |
ListDataEventDemo |
Как Записать Слушателю Данных Списка | Демонстрирует, как прислушиваться к событиям данных списка на модели списка. |
ListSelectionDemo |
Как Записать Слушателю Выбора Списка | Содержит список и таблицу, которые совместно используют ту же самую модель выбора. Можно динамически выбрать режим выбора. |
SharedModelDemo |
Используя Модели | Изменяет ListSelectionDemo так, чтобы список и таблица совместно использовали ту же самую модель данных. |
CustomComboBoxDemo |
Обеспечение Пользовательского Средства рендеринга | Шоу, как обеспечить пользовательское средство рендеринга для поля комбинированного списка. Поскольку списки и поля комбинированного списка используют тот же самый тип средства рендеринга, можно использовать то, что Вы изучаете там применение этого к спискам. Фактически, список и поле комбинированного списка могут совместно использовать средство рендеринга. |
См. Использование JavaFX Средства управления UI: учебное руководство