Если вариантов для выбора слишком много, переключатели не подойдут, поскольку для них не хватит места на экране. В этом случае следует использовать выпадающие списки(combo box). Если пользователь щелкнет на этом компоненте, откроется список из нескольких пунктов и пользователь сможет выбрать один из них.
Если выпадающий список является редактируемым, то строку, соответствующую выбранному пункту, можно редактировать подобно содержимому обычного текстового поля. Таким образом, редактируемый выпадающий список объединяет в себе гибкость текстового поля и возможность выбора из фиксированного набора возможностей, предусмотренных заранее. Выпадающие списки реализуются с помощью класса JComboBox.Для этого чтобы сделать выпадающий список редактируемым, следует вызывать метод setEditable(). Обратите внимание на то, что изменения вносятся только в текущий пунктю Остальная часть списка остается неизменной.
Выбранную опцию или редактируемый текст можно получить с помощью метода getSelectedItem().
В программе, рассматриваемой здесь в качестве примера, пользователь может выбрать стиль шрифта из заданного заранее списка(Serif, SansSerif, Monospaced и т.д.). Кроме того, пользователь может внести в список новый шрифт.
Добавить пункт в список можно с помощью метода addItem(). В нашей программе метод addItem() вызывается только в конструкторе, но при необходимости к нему можно обратиться из любого метода:
1 2 3 4 |
faceCombo = new JComboBox(); faceCombo.setEditable(true); faceCombo.addItem("Serif"); faceCombo.addItem("SansSerif"); |
Этот метод добавляет строку в конце списка. Если строку нужно вставить в другую позицию, следует вызывать метод insertItemAdd();
1 |
faceCombo.insertItemAt("Monospaced", 0); // Вставка в начале списка |
В список можно включать элементы любого типа — для отображения из будет вызван метод toString().
Если во время выполнения возникает необходимость удалить пункт списка, используются методы removeItem() или removeItemAt(), в зависимости от того, хотите ли вы удалить текущий элемент или тот, который находится в указанной позиции списка:
1 2 |
faceCombo.removeItem("Monospaced"); faceCombo.removeItemAt(0); // Удаляет первый элемент |
Для удаления сразу всех элементов списка предусмотрен метод removeAllItems().
Когда пользователь выбирает пункт выпадающего списка, компонент генерирует событие. Чтобы определить, какой пункт списка был выбран, необходимо вызвать метод getSource(), параметром которого является данное событие. Он возвращает ссылку на список, являющийся источником события. Затем следует вызвать метод getSelectedItem(), возвращающий выбранный пункт списка. Значение, возвращенное этим методом, нужно привести к соответствующему типу, обычно к типу String.
1 2 3 4 |
public void actionPerformed(ActionEvent event) { label.setFont(new Font((String) faceCombo.getSelectedItem(), Font.Plain, DEFAULT_SIZE)); |
Вот как выглядит вся программа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ComboBoxModel; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.event.ListDataListener; public class ComboBox { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { ComboBoxFrame frame = new ComboBoxFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } } class ComboBoxFrame extends JFrame { public ComboBoxFrame() { setTitle("ComboBox"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); label = new JLabel("Pro-Java.ru - любимый блог про Java"); label.setFont(new Font("Serif", Font.PLAIN, DEFAULT_SIZE)); add(label, BorderLayout.CENTER); faceCombo = new JComboBox(); faceCombo.setEditable(true); faceCombo.addItem("Serif"); faceCombo.addItem("SansSerif"); faceCombo.addItem("MonoSpaced"); faceCombo.addItem("Dialog"); faceCombo.addItem("DialogInput"); faceCombo.addItem("Arial"); faceCombo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { label.setFont(new Font((String) faceCombo.getSelectedItem(),Font.PLAIN,DEFAULT_SIZE)); } }); JPanel comboPanel = new JPanel(); comboPanel.add(faceCombo); add(comboPanel, BorderLayout.SOUTH); } public static final int DEFAULT_WIDTH = 300; public static final int DEFAULT_HEIGHT = 300; private JComboBox faceCombo; private JLabel label; private static final int DEFAULT_SIZE = 12; } |
Хотите иметь свой собственный интернет магазин? Советуем вам создать интернет магазин на сайте savsolution.ru. При обращении в компанию «SAVsolution», Вам окажут полное содействие во всех вопросах, возникающих в связи с применением новейших бизнес-технологий в Интернет-торговле.