Spec-Zone .ru
спецификации, руководства, описания, API
|
A JComboBox
, у того, который позволяет пользователю выбирать одни из нескольких вариантов, может быть две совсем других формы. Форма значения по умолчанию является недоступным для редактирования полем комбинированного списка, которое обладает кнопкой и выпадающим списком значений. Вторая форма, названная доступным для редактирования полем комбинированного списка, обладает текстовым полем с маленькой кнопкой, примыкающей к этому. Пользователь может ввести значение в текстовом поле или нажать кнопку, чтобы вывести на экран выпадающий список. Вот то, на что две формы полей комбинированного списка похожи в стили Java:
|
|
|
|
Недоступное для редактирования поле комбинированного списка, перед (вершиной) и после того, как кнопка нажимается |
Доступное для редактирования поле комбинированного списка, прежде и после кнопка стрелки нажимается |
Поля комбинированного списка требуют небольшого экранного пространства, и их доступное для редактирования (текстовое поле) форма полезно для разрешения пользователю быстро выбирать значение, не ограничивая пользователя выведенными на экран значениями. Другие компоненты, которые могут вывести на экран варианты "один из многих", являются группами переключателей и списков. Группы переключателей являются обычно самыми легкими для пользователей понять, но поля комбинированного списка могут быть более соответствующими, когда пространство ограничивается или больше, чем несколько вариантов доступны. Списки не ужасно привлекательны, но они являются более соответствующими чем поля комбинированного списка, когда число элементов является большим (скажите, более чем 20), или когда выбор многократных элементов мог бы быть допустимым.
Поскольку доступные для редактирования и недоступные для редактирования поля комбинированного списка столь отличаются, этот раздел обрабатывает их отдельно. Этот раздел затрагивает эти темы:
Приложение, показанное здесь, использует недоступное для редактирования поле комбинированного списка для того, чтобы выбрать любимое изображение:
ComboBoxDemo.java
по сравнению с. RadioButtonDemo.java
.Следующий код, взятый от ComboBoxDemo.java
, создает недоступное для редактирования поле комбинированного списка и устанавливает это:
String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; //Create the combo box, select item at index 4. //Indices start at 0, so 4 specifies the pig. JComboBox petList = new JComboBox(petStrings); petList.setSelectedIndex(4); petList.addActionListener(this);
Это поле комбинированного списка содержит массив строк, но Вы могли так же, как легко использовать значки вместо этого. Поместить что-либо еще в поле комбинированного списка или настроить, как элементы во взгляде поля комбинированного списка, Вы должны записать пользовательское средство рендеринга. Доступное для редактирования поле комбинированного списка также нуждалось бы в пользовательском редакторе. Обратитесь к Обеспечению Пользовательского Средства рендеринга для информации и примера.
Предыдущие кодовые регистры слушатель действия на поле комбинированного списка. Чтобы видеть реализацию слушателя действия и узнать о других типах слушателей, поддерживаемых полем комбинированного списка, обратитесь к Обработке Событий на Поле комбинированного списка.
Независимо от того, который конструктор Вы используете, поле комбинированного списка использует модель поля комбинированного списка, чтобы содержать и управлять элементами в ее меню. Когда Вы инициализируете поле комбинированного списка с массивом или вектором, поле комбинированного списка создает объект модели значения по умолчанию для Вас. Как с другими компонентами Swing, можно настроить поле комбинированного списка частично, реализовывая пользовательскую модель — объект, который реализует ComboBoxModel
интерфейс.
Будьте осторожны, реализовывая пользовательскую модель для поля комбинированного списка. JComboBox
методы, которые изменяют элементы в меню поля комбинированного списка, такой как insertItemAt
, работайте, только если модель данных реализует MutableComboBoxModel
ComboBoxModel
). Обратитесь к таблицам API, чтобы видеть, на какие методы влияют.
Что-то еще, чтобы не упустить — даже для недоступных для редактирования полей комбинированного списка — гарантирует, что Ваша пользовательская модель запускает CONTENTS_CHANGED
событие), когда выбор изменяется. Один способ получить код увольнения события данных списка бесплатно состоит в том, чтобы заставить Ваше поле комбинированного списка смоделировать подкласс AbstractListModel
Вот код от ComboBoxDemo.java
это регистрирует и реализует слушателя действия на поле комбинированного списка:
public class ComboBoxDemo ... implements ActionListener { . . . petList.addActionListener(this) { . . . public void actionPerformed(ActionEvent e) { JComboBox cb = (JComboBox)e.getSource(); String petName = (String)cb.getSelectedItem(); updateLabel(petName); } . . . }
Этот слушатель действия получает недавно выбранный пункт от поля комбинированного списка, использует это, чтобы вычислить имя файла изображения, и обновляет метку, чтобы вывести на экран изображение. Поле комбинированного списка запускает событие действия, когда пользователь выбирает элемент из меню поля комбинированного списка. См.
Поля комбинированного списка также генерируют события элемента, которые запускаются когда любое из изменений состояния выбора элементов. Только один элемент за один раз может быть выбран в поле комбинированного списка, так, когда пользователь делает новый выбор ранее, выбранный пункт становится отменявшим. Таким образом два события элемента запускаются каждый раз, когда пользователь выбирает различный элемент из меню. Если пользователь выбирает тот же самый элемент, никакие события элемента не запускаются. Использовать addItemListener
зарегистрировать слушателя элемента на поле комбинированного списка. Как Записать, что Слушатель Элемента дает общую информацию о реализации слушателей элемента.
Хотя JComboBox
наследовал методы, чтобы зарегистрировать слушателей для низкоуровневых событий — фокус, ключ, и события от нажатия мыши, например — мы рекомендуем, чтобы Вы не прислушались к низкоуровневым событиям на поле комбинированного списка. Вот то, почему: поле комбинированного списка является составным компонентом — оно состоит из двух или больше других компонентов. Само поле комбинированного списка запускает высокоуровневые события, такие как события действия. Его субкомпоненты запускают низкоуровневые события, такие как мышь, ключ, и события фокуса. Низкоуровневые события и субкомпонент, который увольняет их, являются зависимым стилем. Чтобы избежать писать стили зависимый код, следует слушать только для высокоуровневых событий на составном компоненте, таких как поле комбинированного списка. Для получения информации о событиях, включая дискуссию о высоком - и низкоуровневых событиях, обращаются к Пишущим Слушателям События.
Вот изображение демонстрационного приложения, которое использует доступное для редактирования поле комбинированного списка, чтобы ввести образец, с которым можно отформатировать даты.
Следующий код, взятый от ComboBoxDemo2.java
, создает и устанавливает поле комбинированного списка:
String[] patternExamples = { "dd MMMMM yyyy", "dd.MM.yy", "MM/dd/yy", "yyyy.MM.dd G 'at' hh:mm:ss z", "EEE, MMM d, ''yy", "h:mm a", "H:mm:ss:SSS", "K:mm a,z", "yyyy.MMMMM.dd GGG hh:mm aaa" }; . . . JComboBox patternList = new JComboBox(patternExamples); patternList.setEditable(true); patternList.addActionListener(this);
Этот код очень подобен предыдущему примеру, но гарантирует несколько слов объяснения. Полужирная строка кода явно включает редактирование, чтобы позволить пользователю вводить значения. Это необходимо, потому что по умолчанию поле комбинированного списка не доступно для редактирования. Этот определенный пример позволяет редактировать на поле комбинированного списка, потому что его меню не обеспечивает все возможные образцы форматирования даты, только ярлыки на часто используемые образцы.
Доступное для редактирования поле комбинированного списка запускает событие действия, когда пользователь выбирает элемент из меню и когда пользовательские типы Входят. Отметьте, что меню остается неизменным, когда пользователь вводит значение в поле комбинированного списка. Если Вы хотите, можно легко записать слушателю действия, который добавляет новый элемент к меню поля комбинированного списка каждый раз, когда пользователь вводит уникальное значение.
См. Интернационализацию, чтобы узнать больше о форматировании дат и других типов данных.
Поле комбинированного списка использует средство рендеринга, чтобы вывести на экран каждый элемент в его меню. Если поле комбинированного списка недоступно для редактирования, оно также использует средство рендеринга, чтобы вывести на экран в настоящий момент выбранный пункт. Доступное для редактирования поле комбинированного списка, с другой стороны, использует редактора, чтобы вывести на экран выбранный пункт. Средство рендеринга для поля комбинированного списка должно реализовать ListCellRenderer
интерфейс. Редактор поля комбинированного списка должен реализовать ComboBoxEditor
Средство рендеринга значения по умолчанию знает, как представить строки и значки. Если Вы помещаете другие объекты в поле комбинированного списка, средство рендеринга значения по умолчанию вызывает toString
метод, чтобы обеспечить строку, чтобы вывести на экран. Можно настроить способ, которым поле комбинированного списка представляет себя и его элементы, реализовывая Ваше собственное ListCellRenderer
.
Вот изображение приложения, которое использует поле комбинированного списка с пользовательским средством рендеринга:
Нажмите кнопку Launch, чтобы работать, Демонстрационный пример CustomComboBox, использующий
Полный исходный код для этого примера находится в CustomComboBoxDemo.java
. Чтобы получить файлы изображений, это требует, консультируйтесь, пример индексируют.
Следующие операторы от примера создают экземпляр ComboBoxRenderer
(пользовательский class) и установленный экземпляр как средство рендеринга поля комбинированного списка:
JComboBox petList = new JComboBox(intArray); . . . ComboBoxRenderer renderer = new ComboBoxRenderer(); renderer.setPreferredSize(new Dimension(200, 130)); petList.setRenderer(renderer); petList.setMaximumRowCount(3);
Последняя строка устанавливает максимальное количество строки поля комбинированного списка, которое определяет число элементов, видимых, когда меню выводится на экран. Если число элементов в поле комбинированного списка больше чем его максимальное количество строки, у меню есть полоса прокрутки. Значки являются довольно большими для меню, таким образом, наш код ограничивает число строк к 3. Вот реализация ComboBoxRenderer
, средство рендеринга, которое помещает значок и текст бок о бок:
class ComboBoxRenderer extends JLabel implements ListCellRenderer { . . . public ComboBoxRenderer() { setOpaque(true); setHorizontalAlignment(CENTER); setVerticalAlignment(CENTER); } /* * This method finds the image and text corresponding * to the selected value and returns the label, set up * to display the text and image. */ public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { //Get the selected index. (The index param isn't //always valid, so just use the value.) int selectedIndex = ((Integer)value).intValue(); if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else { setBackground(list.getBackground()); setForeground(list.getForeground()); } //Set the icon and text. If icon was null, say so. ImageIcon icon = images[selectedIndex]; String pet = petStrings[selectedIndex]; setIcon(icon); if (icon != null) { setText(pet); setFont(list.getFont()); } else { setUhOhText(pet + " (no image available)", list.getFont()); } return this; } . . . }
Как a ListCellRenderer
, ComboBoxRenderer
реализует вызванный метод getListCellRendererComponent
, который возвращает компонент чей paintComponent
метод используется, чтобы вывести на экран поле комбинированного списка и каждый из его элементов. Самый легкий способ вывести на экран изображение и значок состоит в том, чтобы использовать метку. Так ComboBoxRenderer
подкласс метки и возвращает себя. Реализация getListCellRendererComponent
конфигурирует средство рендеринга, чтобы вывести на экран в настоящий момент выбранный значок и его описание.
К этим параметрам передают getListCellRendererComponent
:
JList list
— объект списка, используемый негласно, чтобы вывести на экран элементы. Пример использует цвета этого объекта, чтобы установить цвета переднего плана и цвета фона.Object value
— объект представить. Integer
в этом примере.int index
— индексирование объекта представить.boolean isSelected
— указывает, выбирается ли объект представить. Используемый примером, чтобы определить, который цвета использовать.boolean cellHasFocus
— указывает, есть ли у объекта представить фокус.Отметьте, что поля комбинированного списка и списки используют тот же самый тип средства рендеринга — ListCellRenderer
. Можно сэкономить себе некоторое время, совместно используя средства рендеринга между полями комбинированного списка и списками, если оно имеет смысл для Вашей программы.
Следующие таблицы приводят обычно используемый JComboBox
конструкторы и методы. Другие методы Вы, наиболее вероятно, вызовете на a JComboBox
объект - те, он наследовался от его суперклассов, такой как setPreferredSize
. См. API JComponent для таблиц обычно используемых наследованных методов.
API для того, чтобы использовать поля комбинированного списка попадает в две категории:
Метод | Цель |
---|---|
JComboBox () |
Создайте поле комбинированного списка с указанными элементами в его меню. У поля комбинированного списка, создаваемого с конструктором по умолчанию, нет никаких элементов в меню первоначально. Каждый из других конструкторов инициализирует меню от своего параметра: объект модели, массив объектов, или a Vector из объектов. |
|
Добавьте или вставьте указанный объект в меню поля комбинированного списка. Места метода вставки, которые указанный объект в указанном индексирует, таким образом вставляя это прежде, чем объект в настоящий момент в этом индексирует. Эти методы требуют, чтобы модель данных поля комбинированного списка была экземпляром MutableComboBoxModel . |
|
Получите элемент из меню поля комбинированного списка. |
|
Удалите один или более элементов из меню поля комбинированного списка. Эти методы требуют, чтобы модель данных поля комбинированного списка была экземпляром MutableComboBoxModel . |
|
Получите число элементов в меню поля комбинированного списка. |
|
Набор или получает модель данных, которая обеспечивает элементы в меню поля комбинированного списка. |
|
Набор или добирается Action связанный с полем комбинированного списка. Для дополнительной информации см. |
Метод или Конструктор | Цель |
---|---|
освободите addActionListener (ActionListener) | Добавьте слушателя действия поля комбинированного списка. Слушатель actionPerformed метод вызывают, когда пользователь выбирает элемент из меню поля комбинированного списка или в доступном для редактирования поле комбинированного списка, когда пользователь нажимает, Входят. |
|
Добавьте слушателя элемента поля комбинированного списка. Слушатель itemStateChanged метод вызывают, когда состояние выбора любого из элементов поля комбинированного списка изменяется. |
|
Набор или добирается, может ли пользователь ввести поле комбинированного списка. |
|
Набор или получает объект, ответственный за рисование выбранного пункта в поле комбинированного списка. Средство рендеринга используется только, когда поле комбинированного списка недоступно для редактирования. Если поле комбинированного списка доступно для редактирования, редактор используется, чтобы нарисовать выбранный пункт вместо этого. |
|
Набор или получает объект, ответственный за рисование и редактирование выбранного пункта в поле комбинированного списка. Редактор используется только, когда поле комбинированного списка доступно для редактирования. Если поле комбинированного списка недоступно для редактирования, средство рендеринга используется, чтобы нарисовать выбранный пункт вместо этого. |
Эта таблица показывает примеры то использование JComboBox
и где те примеры описываются.
Пример | Где Описано | Примечания |
---|---|---|
ComboBoxDemo |
Этот раздел | Использует недоступное для редактирования поле комбинированного списка. |
ComboBoxDemo2 |
Этот раздел | Использует доступное для редактирования поле комбинированного списка. |
CustomComboBoxDemo |
Этот раздел | Обеспечивает пользовательское средство рендеринга для поля комбинированного списка. |
TableRenderDemo |
Как Использовать Таблицы (Используя Поле комбинированного списка как Редактор) | Шоу, как использовать поле комбинированного списка в качестве табличного редактора ячейки. |