Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Тема 7.7 Краткие сведения о диспетчерах компоновки



Расположение компонентов в составе контейнера определяется диспетчером компоновки, связанным с этим контейнером. Диспетчер можно отключить, написав setLayout(null), тогда позиционирование будет ручное, т.е. каждой компоненте нужно задать ее координаты и размеры. В Java определено несколько диспетчеров компоновки. Большинство из них входят в состав AWT (пакет java.awt), но Swing также предоставляет несколько дополнительных диспетчеров компоновки. Все диспетчеры являются экземплярами классов, реализующих интерфейс LayoutManager. В таблице 7.5 описано несколько диспетчеров компоновки, доступных программистам, использующим средства Swing.

Таблица 7.5 – Диспетчеры компоновки

Диспетчер компоновки Описание
FlowLayout Располагает компоненты в строке слева направо; следующая строка размещается под предыдущей. (Установки для некоторых стран предполагают следование компонентов в строке справа налево.)
BorderLayout Помещает компоненты в пяти областях, расположенных по центру и по краям контейнера. По умолчанию такой диспетчер компоновки связан с панелью содержимого
GridLayout Располагает компоненты в виде таблицы
GridBagLayout Располагает компоненты в виде таблицы с ячейками различных размеров
BoxLayout Располагает компоненты по вертикали или по горизонтали
SpringLayout Использует при размещении компонентов специальные ограничения

До сих пор вам встречались два диспетчера: BorderLayout (который по умолчанию связан с панелью содержимого фрейма) и FlowLayout. Сейчас обратим более пристальное внимание на BorderLayout, поскольку именно он используется по умолчанию с панелью содержимого контейнера верхнего уровня.

Диспетчер BorderLayout определяет в составе контейнера пять областей, в которые могут помещаться компоненты. Первая область расположена по центру окна. Остальные четыре –по краям. Соответственно области называются центральной (center), северной (north), южной (south), восточной (east) и западной (wesf). По умолчанию компонент, помещаемый в панель содержимого, располагается в центральной области. Явным образом управлять размещением компонентов можно, используя специальную форму метода add().

void add(Component comp, Object loc)

где параметр comp задает компонент, добавляемый к панели, а параметр loc определяет область, в которую этот компонент будет помещен. Допустимо одно из следующих значений параметра loc:

· BorderLayout.CENTER

· BorderLayout.NORTH

· BorderLayout.EAST

· BorderLayout.SOUTH

· BorderLayout.WEST

Диспетчер компоновки BorderLayout наиболее удобен, если вы создаете объект JFrame, который должен содержать лишь один компонент (он размещается в центре окна), или если вам надо включить группу компонентов, расположенных на панели.

Тема 7.8 Пример использования JDBC и SWING вместе

Приведем пример постоения таблицы на основе выборки из базы данных. В данном примере были спользованы классы DB, User, WorkTableUser из листинга 6.5. Показан класс MyTable потомок класса JTable, с помощью которого строится таблица по объекту класса ResultSet. В класса MyFrame данный объект добавлен к главной панели.

Листинг 7.4

//класс для создания таблицы

importjava.sql.*;

import java.util.Vector;

import javax.swing.JTable;

import javax.swing.table.DefaultTableModel;

public class MyTable extends JTable {

public MyTable(ResultSet rs) {

DefaultTableModel dft = new DefaultTableModel();

ResultSetMetaData rsmd;

try {

rsmd = rs.getMetaData();

for (int i = 1; i < = rsmd.getColumnCount(); i++) {

dft.addColumn(rsmd.getColumnName(i));

}

while (rs.next()) {

Vector v = new Vector();

for (int i = 1; i < = rsmd.getColumnCount(); i++) {

v.add(rs.getString(i));

}

dft.addRow(v);

}

setModel(dft);

setAutoResizeMode(AUTO_RESIZE_ALL_COLUMNS);

} catch (SQLException ex) {

// TODO Auto-generated catch block

System.out.println(" Error in MyTable " + ex);

}

}

}

//фрейм, содержащий таблицу

import java.awt.event.*;

import java.sql.ResultSet;

import javax.swing.*;

public class MyFrame extends JFrame {

private JPanel panel;

private JLabel label1, label2;

private JButton button1, button2, button3;

private JTextField textField1, textField2;

private MyTable table;

private DB db;

private JScrollPane scroll;

private MouseAdapter mouse;

public MyFrame() {

//установка заголовка и размеров фрейма

setTitle(" Заголовок" );

setBounds(500, 200, 500, 350);

panel = new JPanel(null);

//подключение к базе данных

db = new DB(" jdbc: mysql: //localhost/", " my_db", " root", " " );

//создание таблицы

table = new MyTable(db.query(" SELECT * FROM user" ));

//добавление таблицы в скролл, а скролла к панели

scroll = new JScrollPane(table);

scroll.setBounds(50, 50, 200, 150);

panel.add(scroll);

//создание всех компонент

label1 = new JLabel(" Id" );

label2 = new JLabel(" Name" );

button1 = new JButton(" Add" );

button2 = new JButton(" Delete" );

button3 = new JButton(" Change" );

textField1 = new JTextField(String.valueOf(Integer.valueOf(table.getValueAt(table.getRowCount() - 1, 0).toString()) + 1));

textField2 = new JTextField();

//позиционирование

label1.setBounds(300, 50, 150, 20);

textField1.setBounds(300, 90, 150, 20);

label2.setBounds(300, 130, 150, 20);

textField2.setBounds(300, 170, 150, 20);

button1.setBounds(50, 250, 100, 20);

button3.setBounds(170, 250, 100, 20);

button2.setBounds(290, 250, 100, 20);

// добавление компонент к панели

panel.add(label1);

panel.add(label2);

panel.add(button1);

panel.add(button2);

panel.add(button3);

panel.add(textField1);

panel.add(textField2);

//добавление панели к фрейму

add(panel);

//добавление кнопок к прослушиванию

button1.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

db.addUser(new User(Integer.valueOf(textField1.getText()), textField2.getText()));

updateTable();

textField1.setText(String.valueOf(Integer.valueOf(table.getValueAt(table.getRowCount() - 1, 0).toString()) + 1));

 

}

});

button2.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

db.deleteUser(new User(Integer.valueOf(textField1.getText()), textField2.getText()));

updateTable();

textField1.setText(String.valueOf(Integer.valueOf(table.getValueAt(table.getRowCount() - 1, 0).toString()) + 1));

}

});

button3.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

db.changeNameUser(new User(Integer.valueOf(textField1.getText()), textField2.getText()));

updateTable();

textField1.setText(String.valueOf(Integer.valueOf(table.getValueAt(table.getRowCount() - 1, 0).toString()) + 1));

}

});

mouse = new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

textField1.setText(table.getValueAt(table.getSelectedRow(), 0).toString());

textField2.setText(table.getValueAt(table.getSelectedRow(), 1).toString());

}

};

table.addMouseListener(mouse);

// установка операции по нажатию на крестик

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// прорисовка фрейма

setVisible(true);

}

public void updateTable() {

panel.remove(scroll);

table = new MyTable(db.query(" SELECT * FROM user" ));

table.addMouseListener(mouse);

scroll = new JScrollPane(table);

scroll.setBounds(50, 50, 200, 150);

panel.add(scroll);

panel.updateUI();

}

}

 

В результате запуска данного кода получим фрейм, изображенный на рисунке 7.4

Рисунок 7.4

 

При нажатии на кнопку Add новый пользователь добавляется в базу данных, Change – меняется имя, Delete – пользователь удаляется из БД и таблица обновляется. На рисунке 7.5 показан фрейм после добавления user7, удаления user2 и редактирование user3.

Рисунок 7.5

 

В данном методическом пособии были показаны примеры использования лишь некоторых компонент. Библиотека swing дает большие возможности для создания пользовательских интерфейсов, поэтому рекомендуем продолжить изучение данной библиотеки по документации или по специальным справочникам по swing.

 

 

Выводы к главе:

· Swing представляет собой набор классов, применяемых для создания графических пользовательских интерфейсов (GraphicalUserInterface – GUI) современных приложений, в том числе Web-программ.

· Swing поддерживает настраиваемые стили.

· Визуальный компонент можно представить себе как элемент, сочетающий следующие характеристики.

· Способ отображения на экране.

· Реакция на действия пользователя.

· Информация, связанная с данным компонентом.

· Компоненты – это независимые элементы, в качестве примеров которых можно привести кнопки или линейные регуляторы.

· Контейнер может содержать в себе несколько компонентов и представляет собой специальный тип компонента.

· В Swing используется тот же механизм обработки событий, что и в AWT, – это модель делегирования событий.

· Согласно модели делегирования, событие является объектом, описывающим изменения состояния источника.

· Источник события – это объект, сгенерировавший его. Сгенерировав событие, источник должен передать его всем зарегистрированным обработчикам.

· Обработчик событий – это объект, оповещаемый о возникновении события.

· Java предоставляет набор классов адаптеров, в которых уже определены методы, объявленные в интерфейсах обработчиков. Классы адаптеров удобны тогда, когда вы собираетесь использовать лишь некоторые из событий, предусмотренных в интерфейсе.

· Расположение компонентов в составе контейнера определяется диспетчером компоновки, связанным с этим контейнером. Диспетчер можно отключить, написав setLayout(null), тогда позиционирование будет ручное, т.е. каждой компоненте нужно задать ее координаты и размеры.

 

 

Задания к главе:

 

Разработать приложение с пользовательским интерфейсом, работающее с базой данных.

1) Система Факультатив. Преподаватель объявляет запись на Курс. Студент записывается на Курс, обучается и по окончании Препода­ватель выставляет Оценку, которая сохраняется в Архиве. Студентов, Преподавателей и Курсов при обучении может быть несколько.

2) Система Платежи. Клиент имеет Счет в банке и Кредитную Карту (КК). Клиент может оплатить Заказ, сделать платеж на другой Счет, заблокировать КК и аннулировать Счет. Администратор может заблокировать КК за превышение кредита.

3) Система Больница. Пациенту назначается лечащий Врач. Врач может сделать назначение Пациенту (процедуры, лекарства, операции). Медсестра или другой Врач выполняют назначение. Пациент может быть выписан из Больницы по окончании лечения, при нарушении режима или при иных обстоятельствах.

4) Система Вступительные экзамены. Абитуриент регистрируется на Факультет, сдает Экзамены. Преподаватель выставляет Оценку. Система подсчитывает средний балл и определяет Абитуриентов, зачисленных в учебное заведение.

5) Система Библиотека. Читатель оформляет Заказ на Книгу. Система осуществляет поиск в Каталоге. Библиотекарь выдает Читателю Книгу на абонемент или в читальный зал. При невозвращении Книги Читателем он может быть занесен Администратором в «черный список».

6) Система Конструкторское бюро. Заказчик представляет Техническое Задание (ТЗ) на проектирование многоэтажного Дома. Конструктор регистрирует ТЗ, определяет стоимость проектирования и строитель­ства, выставляет Заказчику Счет за проектирование и создает Бригаду Конструкторов для выполнения Проекта.

7) Система Телефонная станция. Абонент оплачивает Счет за разговоры и Услуги, может попросить Администратора сменить номер и отказаться от услуг. Администратор изменяет номер, Услуги и временно отключает Абонента за неуплату.

8) Система Автобаза. Диспетчер распределяет заявки на Рейсы между Водителями и назначает для этого Автомобиль. Водитель может сделать заявку на ремонт. Диспетчер может отстранить Водителя от работы. Водитель делает отметку о выполнении Рейса и состоянии Автомобиля.

9) Система Интернет-магазин. Администратор добавляет информацию о Товаре. Клиент делает и оплачивает Заказ на Товары. Админист­ратор регистрирует Продажу и может занести неплательщиков в «черный список».

10) Система Железнодорожная касса. Пассажир делает Заявку на станцию назначения, время и дату поездки. Система регистрирует Заявку и осуществляет поиск подходящего Поезда. Пассажир делает выбор Поезда и получает Счет на оплату. Администратор вводит номера Поездов, промежуточные и конечные станции, цены.

11) Система Городской транспорт. На Маршрут назначаются Автобус, Троллейбус или Трамвай. Транспортные средства должны двигаться с определенным для каждого Маршрута интервалом. При поломке на Маршрут должен выходить резервный транспорт или увеличиваться интервал движения.

12) Система Аэрофлот. Администратор формирует летную Бригаду (пилоты, штурман, радист, стюардессы) на Рейс. Каждый Рейс выполняется Самолетом с определенной вместимостью и дальностью полета. Рейс может быть отменен из-за погодных условий в Аэропорту отлета или назначения. Аэропорт назначения может быть изменен в полете из-за технических неисправностей, о которых сообщил командир.

13) Система Периодические издания. Читатель может сделать Заявку, предварительно выбрав периодические Издания из списка. Система подсчитывает сумму для оплаты. Читатель оплачивает заявку. Администратор добавляет Заявку в «черный список», если Клиент не оплачивает её в определённый срок.

14) Система Заказ гостиницы. Клиент оставляет Заявку на Номер, указав количество мест в номере, класс апартаментов и время пребывания. Администратор рассматривает Заявку, подтверждает или отклоняет её. Результат просматривает Клиент. В случае подтверждения Заявки Клиент оплачивает услуги.

15) Система Жилищно-коммунальные услуги. Квартиросъемщик отправляет Заявку, в которой указывает род работ, масштаб и желаемое время выполнения. Диспетчер формирует соответствующую Бригаду и регистрирует её в Плане работ. Диспетчер может отклонить Заявку в случае занятости всех Бригад.

16) Система Прокат автомобилей. Клиент выбирает Автомобиль из списка доступных, заполняет форму Заказа, указывая паспортные данные, срок аренды. Администратор может отклонить Заявку, указав причины отказа. При подтверждении Заявки Клиент оплачивает Заказ. Система выписывает сумму. В случае повреждения Автомобиля Клиентом Администратор вносит соответствующие пометки.

 

 

ЗАКЛЮЧЕНИЕ

В настоящее время Java один из наиболее популярных и перспективных языков, область применения которого с каждым днем становится все шире. Изучив данное методическое пособие, Вы получили лишь базовые знания по JavaSE – сделали первый шаг на пути изучения этого широко востребованного языка. Изучив основы языка, у Вас есть два варианта продолжения Вашего обучения и развития:

· изучить JavaEE на “Продвинутом курсе по Java” и заниматься разработкой под web;

· изучить JavaME на “Программировании под Android” и заниматься разработкой приложений под платформу Android.

Каждый выбирает то, что ближе ему. Главное не останавливаться в развитии и продолжать обучение, набраться опыта и стать успешным Java- программистом.

Если у Вас возникли какие-либо вопросы, замечания или предложения по данному методическому пособию, то присылайте их на адрес [email protected].

С уважением, Елена Карсека

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-05-30; Просмотров: 718; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.055 с.)
Главная | Случайная страница | Обратная связь