- •Федеральное агентство по образованию рф
- •2. Организация программ на языке Java.
- •2.1. Обработка критических ошибок и методы их локализации в языке Java..
- •3. Ввод/вывод данных в консольном режиме.
- •4. Одномерные массивы.
- •5. Двумерные массивы.
- •Int a[][];
- •6. Разработка приложений на языке Java.
- •7. Разработка собственных объектов.
- •7.1. Объекты управления
- •8. Разработка аплитов.
- •9. Параллельные потоки в языке Java.
- •10. Использование таблиц при программировании на языке Java.
- •11. Файловый ввод-вывод в приложениях
- •Список рекомендуемой литературы
6. Разработка приложений на языке Java.
Приложение – это программа, имеющая хотя бы одну форму и состоящая из двух классов:
Класс проекта, это класс содержащий функцию запуска программы main, который создает форму и выводит ее на экран. В общем случае класс проекта может выглядеть следующим образом.
// Первым делом надо указать имя пакета к которому относиться
// данное приложение
package имя пакета;
// Подключаем класс, обеспечивающий обработку внешнего
// вида формы (интерфейса пользователя)
import javax.swing.UIManager;
// Подключаем пакет AWT. Это основной пакет
// обеспечивающий работу графического интерфейса
import java.awt.*;
// Создаем запускающий класс программы
public class имя главного класса {
// Определяем флаг, указывающий является ли создаваемая форма
// частью данного пакета
boolean packFrame = false;
// Далее идет описание конструктора класса, который создает и
// выводит окно на экран
public имя главного класса() {
// Создаем окно
класс окна frame = new класс окна();
// Проверяем состояние фрейма
if(packFrame) {
frame.pack();
}
else {
frame.validate();
}
// Определяем размеры экрана
Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
// Определяем размеры окна
Dimension frameSize=frame.getSize();
// Если установленные размеры окна больше размера экрана,
// то принудительно устанавливаем их в размер экрана.
if(frameSize.height>screenSize.height)
{
frameSize.height=screenSize.height;
}
if (frameSize.width>screenSize.width)
{
frameSize.width=screenSize.width;
}
// Располагаем окно по центру
frame.setLocation((screenSize.width-frameSize.width)/2,
(screenSize.height - frameSize.height) / 2);
// и выводим его на экран
frame.setVisible(true);
}
// Далее идет описание точки входа в программу. Это функция
// должна быть определена как статическая, т.к. вызывается еще до
// создания какого либо объекта
public static void main(String[] args) {
// Устанавливаем внешний вид окна, тот, который определен
// системой. В настоящее время существует большое количество
// способов отображения окон, их основной недостаток это отцетствие
// в стандартных пакетах Java
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
e.printStackTrace();
}
// и создаем динамический объект выводящий окно на экран
new имя главного класса ();
}
}
Класс формы. Это класс непосредственно описывающий окно, которое будет выведено на экран. Данный класс должен является дочерним классом от класса Frame(при использовании библиотекиAWT) илиJFrame(при использовании библиотекиSwing). В общем случае класс формы, которая ничего не делает может иметь следующий вид:
package имя пакета;
// Подключаем пакет AWT. Это основной пакет
// обеспечивающий работу графического интерфейса
import java.awt.*;
// Подключаем пакет обработки событий, который необходим
// для реакции приложения на системные сообщения. В данном
// случае обработка нажатия пользователем системной кнопки
// «закрыть»
import java.awt.event.*;
// Подключаем пакет SWING, этот пакет является расширением пакета
// AWT и обеспечивает упрощение разработки интерфейса.
import javax.swing.*;
// Создаем класс, который является наследником класса
// JFrame содержащим все функции работы с графическим интерфейсом
// поддерживаемым язаком Java
public class класс окна extends JFrame {
// Далее идет описание глобальных переменных и визуальных объектов
// расположенных на форме.
…
// Описываем конструктор окна. В данном случае этот конструктор
// без параметров, т.к. это окно является основным окном приложения
public класс окна() {
// Устанавливаем флаг перехвата оконных событий, таких как нажатие
// мыши, клавиши, системной команды и т.д.
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
// Запускаем функцию инициализации компонентов окна
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
// Если данной окно является дочерним, то необходимо дополнительно
// описать конструктор класса создания дочернего окна. Для этого в
// качестве параметра необходимо указать возможность передачи
// родительского окна, для установки их взаимосвязей.
public класс окна(JFrame owner) {
// Передаем класс родительского окна базовому классу, в нашем
// случае JFrame
super(owner);
// Устанавливаем флаг перехвата оконных событий, таких как нажатие
// мыши, клавиши, системной команды и т.д.
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
// Запускаем функцию инициализации компонентов окна
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
// Функция инициализации объектов системы. Здесь должно быть указаны
// все инструкции, которые необходимо выполнить в момент создания
// объекта, такие как установка взаимосвязей компонентов, их
// позиционирование, создание каких либо динамических объектов
// и т.д.
private void jbInit() throws Exception {
}
// И последней обязательной функцией является обработчик событий
// окна, в этом примере он необходим для обеспечения завершения
// окна при нажатии кнопки «закрыть» в системном меню.
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
}
Для простоты восприятия желательно чтобы каждый класс находился в своем файле, хотя с точки зрения программирования на языке Javaразницы никакой нет.
Среда программирования JBuilderпри создании приложения эти классы создает автоматически.
Обычно в настоящее время пользуются библиотекой Swing, в том и в другом случае данный класс содержит конструктор и функцию инициализации объектов (вJBuilder–jbInit, вызываемая из конструктора).
Основными переменными данного класса являются компоненты формы (если они есть), которые устанавливаются на нее с помощью закладки Designerв средеJBuilder, работа сDesignerчастично напоминает работу с компонентами формыC++BuilderилиDelphi, но в сильно урезанном виде.
Каждый объект, расположенный на форме имеет определенные свойства, устанавливаемые в Designerи обработчики событий, которые в свою очередь являются отдельными классами, описываемые внутри главного класса.
Особое внимание следует обратить на такое свойство контейнерного класса как layout. Это свойство определяет способ расположения компонентов входящих в состав данного класса. Способы позиционирования приведены в таблице 3.
Таблица 3. Способы позиционирования компонентов.
|
Способ |
Поведение компонента |
|
XYLayout |
Автоматическое позиционирование отсутствует. Положение компонента на форме определяется координатами. При изменение размеров формы размеры и положение компонентов следует устанавливать вручную. |
|
VerticalFlowLayout |
При данном способе позиционирования компоненты располагаться сверху вниз, занимая все пространство формы по горизонтали. При изменении размеров, горизонтальные размеры компонентов пропорционально изменяются. |
|
BoxLayout |
При данном способе позиционирования компоненты располагаться слева на право, занимая все пространство формы по горизонтали и вертикали. При изменении размеров, горизонтальные и вертикальные размеры компонентов пропорционально изменяются. |
|
OverlayLayout |
При данном способе позиционирования все пространство формы отдается одному компоненту. При изменении размеров, горизонтальные и вертикальные размеры компонента пропорционально изменяются. |
|
BorderLayout |
При данном способе расположения все пространство формы делиться на пять частей: North,South,East,West,Center. Таким образом контейнерный класс может содержать только пять компонентов.
При изменении размеров формы размеры компонентов пропорционально изменяются соответственно: North,South- по ширине;East,West– по высоте; аCenterпо обеим координатам. |
|
FlowLayout |
При данном способе позиционирования компоненты занимают свободное пространство с лева на право, когда ширина формы не позволяет добавить очередной компонент, он переноситься на следующую линию по вертикали. При изменение размеров формы размеры компонентов следует устанавливать вручную. |
|
GridLayout |
При данном способе позиционирования все пространство контейнерного класса делиться на равные части, в зависимости от количества колонок и столбцов таблицы компонентов. Каждый компонент занимает все пространство выделенной ему ячейки. При изменении размеров формы размеры компонентов пропорционально изменяются. |
При ручном позиционировании особое внимание стоит уделить размерам объекта и его местоположению на форме. Для определения местоположения используется функция setLocation, параметрами которой являются относительные координаты по осиXиY. Кроме того следует установить минимальныеminimumSize– размеры, меньше которых компонент быть не может иmaximumSize- размеры больше которых компонент быть не может. Для определения текущих размеров используется свойствоpreferredSize.
