Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java_3(Методичка на КП-пр 3 лаба ).doc
Скачиваний:
25
Добавлен:
19.11.2018
Размер:
270.34 Кб
Скачать

Схемы, модели и события

Схемы (layout): Swing содержит множество схем, которые представляют собой классы, управляющие размещением компонентов в приложении и тем, что должно произойти с ними при изменении размеров окна приложения или при удалении или добавлении компонентов.

События (event): Вы должны реагировать на нажатия клавиши, нажатия кнопки мыши и на все остальное, что пользователь может сделать в UI.

Модели (model) - это самый эффективный способ работы с данными. Они удаляют большую часть работы по обработке данных из самого компонента (вспомните обсуждение MVC) и предоставляют оболочку для общих объектных классов данных (например, Vector и ArrayList).

Простые схемы

Как уже говорилось в предыдущем разделе, схема управляет расположением компонентов в приложении. Менеджеры схем берут все это на себя. Никто не использует одни и те же настройки, поэтому менеджеры схем создают "относительные" схемы, позволяя вам указывать, как должно происходить изменение размеров относительно других размещенных компонентов. Вы просто вызываете setLayout(yourLayout) для настройки менеджера схемы. Последующие вызовы add() добавляют компонент в контейнер и позволяют менеджеру схемы позаботиться об их размещении.

В Swing включено много схем. Такими схемами являются FlowLayout, GridLayout и BorderLayout.

В схеме FlowLayout компоненты располагаются слева направо. Когда пространство заканчивается, происходит переход на новую строку. Это самая простая в использовании схема и наименее мощная: setLayout(new FlowLayout());

add(new JButton("Button1"));

add(new JButton("Button2"));

add(new JButton("Button3"));

Схема GridLayout позволяет указать количество строк и столбцов, а затем располагает компоненты в этих ячейках по мере их добавления: setLayout(new GridLayout(1,2));

add(new JButton("Button1"));

add(new JButton("Button2"));

add(new JButton("Button3"));

Схема BorderLayout. В ней используются понятия North (север), South (юг), East (восток), West (запад) и Center (центр) для размещения компонентов на экране: setLayout(new BorderLayout());

add(new JButton("Button1"), "North");

add(new JButton("Button2"), "Center");

add(new JButton("Button3"), "West");

GridBagLayout

В то время как приведенные выше примеры хороши для простых схем, более продвинутые UI требуют использования более сложного менеджера схемы. Вот здесь нужен GridBagLayout.

События

Swing обрабатывает события, используя модель событие/прослушиватель. Эта модель работает путем разрешения некоторым классам регистрироваться на события от компонента. Такой класс называется прослушивателем (listener), поскольку он ждет возникновения событий в компоненте и выполняет действия при их возникновении. Компонент сам знает, как "активировать" событие (то есть, он знает типы взаимодействий, которые может генерировать, и как дать прослушивателям знать, когда происходят эти взаимодействия). Он передает это взаимодействие при помощи событий (event), классов, содержащих информацию о взаимодействии.

Простейший пример - кнопка JButton и вывод сообщений "Hello" на консоль при ее нажатии.

JButton знает, когда на нее нажимают; это обрабатывается внутри компонента, код для обработки этого не нужен. Однако прослушиватель должен зарегистрироваться для получения этого события от JButton, для того чтобы вы могли вывести сообщение "Hello". Класс listener делает это, реализуя интерфейс listener и вызывая метод addActionListener() компонента JButton: // Создать JButton

JButton b = new JButton("Button");

// Зарегистрировать прослушиватель

b.addActionListener(new HelloListener());

class HelloListener implements ActionListener

{

// Метод интерфейса для получения нажатий кнопки

public void actionPerformed(ActionEvent e)

{

System.out.println("Hello");

}

}

Компонент JList работает аналогично. Когда кто-то выбирает что-то в JList, вы выводите на консоли сообщение о выбранном объекте: // myList - это JList, заполненный данными

myList.addListSelectionListener(new ListSelectionListener()

{

public void valueChanged(ListSelectionEvent e)

{

Object o = myList.getSelectedItem();

System.out.println(o.toString());

}

}

);

Из тих двух примеров вы должны понять, как работает в Swing модель событие/прослушиватель. Фактически, каждое взаимодействие в Swing обрабатывается таким способом.