- •Ide или текстовый редактор. Я рекомендую Eclipse (ссылки на дополнительную информацию по Eclipse можно найти в разделе Ресурсы).
- •Роль Swing
- •JComponent
- •JButton
- •JTextField
- •Is/setVisible(): Получить/установить видимость фрейма, другими словами, отображение на экране.
- •JPasswordField
- •JCheckBox/jRadioButton
- •JMenu/jMenuItem/jMenuBar
- •JSpinner
- •JToolBar
- •JToolTip
- •JOptionPane
- •JTextArea
- •JScrollPane
- •Простые схемы
- •События
- •Примеры модели
- •Шаг 3: Управление событиями
- •Шаг 4: Модели
- •Шаг 5: Звонки и свистки
- •Дальнейшие действия
- •Получить продукты и технологии
Примеры модели
Давайте рассмотрим, как работает модель, на простом примере JComboBox. В предыдущем разделе о JComboBox я показал вам, как добавлять элементы к данным, вызывая setItem(). Хотя это и приемлемо для простых демонстраций, в реальных приложениях так делают не часто. В конце концов, когда имеется 25 вариантов, и они постоянно меняются, неужели вы захотите проходить по ним в цикле, вызывая addItem() 25 раз? Конечно же, нет.
JComboBox имеет метод setModel(), который принимает экземпляр класса ComboBoxModel. Вы должны использовать этот метод вместо метода addItem() для создания данных в JComboBox.
Предположим, что имеется ArrayList с алфавитом в качестве данных («A», «B», «C» и т.д.):
MyComboModel model = new MyComboModel(alphaList); myComboBox.setModel(model);
public class MyComboModel implements ComboBoxModel { private List data = new ArrayList(); private int selected = 0;
public MyComboModel(List list) { data = list; }
public void setSelectedItem(Object o) { selected = data.indexOf(o); }
public Object getSelectedItem() { return data.get(selected); }
public int getSize() { return data.size(); }
public Object getElementAt(int i) { return data.get(i); } } |
Хорошей стороной использования модели является то, что вы можете повторно использовать ее снова и снова. Например, предположим, что данные в JComboBox должны быть изменены с букв алфавита на числа от 1 до 27. Вы можете выполнить это изменение одной простой строкой, которая использует новый List данных для заполнения JComboBox без использования дополнительного кода:
myComboBox.setModel(new MyComboModel(numberList)); |
Модели являются полезными возможностями Swing, поскольку они предоставляют возможность повторного использования кода и намного более легко работают с данными. Как это часто случается в крупномасштабных приложениях, разработчики серверной части создают и извлекают данные и передают их UI-разработчикам. Обязанностью UI-разработчика является работать с данными и отображать их правильно, а модели — инструменты, которые делают это.
Объединение всего этого вместе
Пример приложения
После примеров вы, возможно, захотите увидеть все эти вещи в действии. Хватит красивых картинок. Перейдем к конкретному примеру, который объединяет все, что вы изучили в данном руководстве.
Мы рассмотрим пример простой системы резервирования билетов. Она позволяет пользователю ввести город отправления и прибытия и нажать кнопку для поиска. Она имеет фиктивную базу данных с расписанием полетов. По этой базе данных можно выполнять поиск, а результаты поиска отображаются в таблице. После заполнения таблицы пользователи могут выбирать рейсы из таблицы и покупать билеты, изменяя количество требуемых билетов и нажимая соответствующую кнопку.
Это простое по внешнему виду приложение, которое позволит вам увидеть в действии все элементы Swing. Данный пример должен ответить на любые вопросы, которые, возможно, остались у вас от предыдущих разделов. Перед началом работы посмотрим на законченный продукт:
Пример приложения
Шаг 1: Размещение компонентов
Как я уже говорил, нет большой необходимости изучать сложные схемы, поскольку вы можете использовать визуальный редактор.
Шаг 2: Инициализация данных
Приложение не может работать без данных. Давайте подумаем о том, какого рода данные нам нужны для данного приложения. Во-первых, нам необходим список городов для выбора города отправления и прибытия. Затем, нам необходим список рейсов для поиска.
Для этого примера я использую фиктивные данные, потому что главное в приложении — это Swing, а не данные. Все данные создаются в классе DataHandler. Этот класс управляет городами отправления и прибытия, а также обрабатывает операции поиска рейсов и извлечения записей.
Города сохраняются в простых объектах String. Однако рейсы хранятся в объектах данных, называемых Flights, содержащих поля для города отправления, города прибытия, номера рейса и количества доступных билетов.
Теперь, со всеми этими красными ленточками, указывающими путь, давайте вернемся к приложению.