Java
Java
Учреждение образования
«Белорусский государственный университет
информатики и радиоэлектроники»
Р
УИ
ЯЗЫКИ ПРОГРАММИРОВАНИЯ ДЛЯ РАЗРАБОТКИ СЕТЕВЫХ
БГ
ПРИЛОЖЕНИЙ: ЯЗЫК ПРОГРАММИРОВАНИЯ JAVA
ЛАБОРАТОРНЫЙ ПРАКТИКУМ
а
для студентов специальностей
I-27 01 01 «Экономика и организация производства»,
ек
I-26 02 03 «Маркетинг»
дневной формы обучения
т
ио
В 2-х частях
Часть 2
бл
Би
Минск 2008
1
УДК 681.3.061(075.8)
ББК 32.973.26-018.1 я 73
Я 41
Рецензент
профессор кафедры интеллектуальных информационных
технологий Белорусского государственного университета
информатики и радиоэлектроники Н. А. Гулякина
Р
А в т о р ы:
Т. М. Унучек, Д. А. Сторожев, Е. Н. Унучек,
УИ
В. Н. Комличенко, Д. С. Марудов
БГ
Языки программирования для разработки сетевых приложений:
Я 41 язык программирования JAVA: лаб. практикум для студ. спец. I-27 01 01
«Экономика и организация производства», I-26 02 03 «Маркетинг» днев.
формы обуч. В 2 ч. Ч. 2 / Т. М. Унучек [и др.]. – Минск : БГУИР, 2008. –
а
64 с.
ек
УДК 681.3.061(075.8)
ББК 32.973.26-018.1 я 73
Введение ..................................................................................................................5
Лабораторная работа №1. Разработка апплетов, работа с графикой ............6
Пакет AWT............................................................................................................6
Класс Applet ..........................................................................................................7
Инициализация и завершение апплета................................................................8
Запуск апплетов....................................................................................................8
Рисование линий в апплете ..................................................................................9
Рисование прямоугольников в апплете ...............................................................9
Р
Рисование эллипсов и кругов в апплете............................................................10
Рисование дуг в апплете.....................................................................................10
УИ
Работа с цветом...................................................................................................11
Задания для самостоятельного выполнения .....................................................15
Лабораторная работа №2. Разработка апплетов с использованием
БГ
потоков и их синхронизации ..............................................................................17
Многопоточное программирование ..................................................................17
Приоритеты потоков ..........................................................................................17
Класс Thread. Интерфейс Runnable....................................................................17
а
Создание потоков. Жизненный цикл потока ....................................................18
Синхронизация потоков .....................................................................................19
ек
ItemEvent .............................................................................................................34
KeyEvent..............................................................................................................34
MouseEvent..........................................................................................................35
Би
TextEvent .............................................................................................................35
WindowEvent.......................................................................................................36
Элементы-источники событий ..........................................................................36
Интерфейсы прослушивания событий ..............................................................37
Классы пакета AWT Component, Window, Frame .............................................38
Элементы управления Label, Button, Checkbox, Choice, List, Scrollbar ...........40
Элементы управления TextField и TextArea .....................................................44
Диалоговые окна.................................................................................................47
Задания для самостоятельного выполнения .....................................................49
3
Лабораторная работа №4. Разработка пользовательского интерфейса
для работы с базами данных ..............................................................................53
Интерфейс JDBC ................................................................................................53
Типы драйверов в JDBC.....................................................................................56
Последовательность работы с базами данных..................................................56
Задания для самостоятельного выполнения .....................................................62
Литература ............................................................................................................64
Р
УИ
БГ
а
ек
т
ио
бл
Би
4
ВВЕДЕНИЕ
Р
излагаются особенности графических возможностей Java, разработки апплетов,
создания графического пользовательского интерфейса (GUI) с использованием
УИ
фреймов и элементов управления. Особое внимаение уделено созданию, орга-
низации работы и синхронизации потоков. Раскрыты основные принципы рабо-
ты с базами данных.
Основной акцент в лабораторном практикуме сделан на разработку при-
БГ
ложений на основе оконного интерфейса. Существуют фундаментальные раз-
личия между консольными приложениями, которые создавались в первой части
лабораторного практикума, и программами Java с оконным интерфейсом. В
а
консольном приложении в качестве интерфейса с пользователем рассматрива-
ется командная строка, через которую определяется последовательность разви-
ек
5
ЛАБОРАТОРНАЯ РАБОТА №1
Р
сле того как апплет прибывает к клиенту, он имеет ограниченный доступ к ре-
УИ
сурсам системы, которые использует для создания произвольного мультиме-
дийного интерфейса пользователя и выполнения комплексных вычислений без
риска заражения вирусами или нарушения целостности данных. Работа с ап-
плетами поддерживается пакетом AWT. Этот пакет достаточно большой, что
БГ
позволяет работать не только с апплетами. Пакет AWT содержит многочислен-
ные классы и методы, которые позволяют создавать окна и управлять ими.
Рассмотрим более подробно указанный пакет AWT.
а
Пакет AWT
ек
Component
бл
Container TextComponent
Би
MenuContainer
Interface Window Panel
Frame Applet
Рис. 1.1. Фрагмент иерархии классов AWT
6
Рассмотрим особенности программирования апплетов. В последних лабо-
раторных работах рассмотрим более подробно другие классы пакета AWT.
Класс Applet
Для работы с апплетами предназначен класс Applet, который определяет
методы, представленные в табл. 1.1. Applet обеспечивает всю необходимую
поддержку для выполнения апплетов, такую как запуск и остановка. Он также
реализует методы, которые загружают и показывают изображения, и методы,
которые загружают и проигрывают аудиоклипы.
Таблица 1.1
Р
Методы, определенные в классе Applet
УИ
Метод Описание
1 2
void destroy() Освобождает все ресурсы, занятые апплетом. Вызы-
вается браузером непосредственно перед тем, как ап-
плет завершается.
БГ
Метод destroy() вызывается, когда среда решает, что
апплет должен быть полностью удален из памяти. В
а
этот момент следует освободить любые ресурсы, ко-
торые апплет может использовать
ек
(пустой указатель)
void init() Вызывается, когда апплет начинает выполнение. Это
первый метод, который вызывается для любого ап-
ио
Р
Инициализация и завершение апплета
УИ
Важно понять порядок, в котором вызываются различные методы аппле-
та. Когда апплет начинает выполняться, AWT вызывает методы в такой после-
довательности:
БГ
1) init(); 2) start(); 3) paint();
При завершении апплета имеет место следующая последовательность
вызовов:
1) stop(); 2) destroy();
а
Запуск апплетов
ек
<applet
[CODEBASE = codebaseURL]
CODE = appletFile
Би
[ALT = altemateText]
[NAME = appletInstanceName]
WIDTH = pixels HEIGHT = pixels
[ALIGN = alignment]
[VSPACE = pixels] [HSPACE = pixels]
>
[< param NAME = AttributeName value = AttributeValue>]
[< param NAME = AttributeName2 value= AttributeValue>]
[HTML Displayed in the absence of Java]
</applet>
8
CODEBASE − необязательный параметр, который определяет базовый URL-
адрес кода апплета. Базовый URL – это каталог, в котором будет разыскиваться
исполняемый файл апплета (имя этого файла указывается параметром CODE).
CODE − обязательный параметр, который задает имя файла, содержащего
откомпилированный файл (с расширением .class) вашего апплета.
WIDTH и HEIGHT − это обязательные параметры, которые задают размер
области показа апплета (в пикселах).
ALIGN − необязательный параметр, который определяет выравнивание
апплета. Возможные значения: left, right, top, bottom, middle, BASELINE,
TEXTTOP, ABSMTODLE И ABSBOTTOM.
Р
<param> (с параметрами NAME= и VALUE=) – тег, позволяющий указы-
вать на HTML-странице параметры, специфические для данного апплета. Ап-
УИ
плет получает доступ к этим параметрам с помощью метода getParameter().
Пример Web-странички, на которой размещен апплет DemoApplet.class:
БГ
Пример 1.1
<html>
<head>
<title> DemoApplet</title>
а
</head>
<applet CODE="DemoApplet.class" WIDTH ="500" HEIGHT="500">
ек
</applet> </html>
Рисование линий в апплете
т
Пример 1.2
public void paint(Graphics g) {
Би
9
Координаты левого верхнего угла прямоугольника задаются в параметрах
top и left, width и height, указывающих размеры прямоугольника (в пикселах).
Пример 1.3
public void paint(Graphics g)
{ g.drawRect(10, 10, 60, 50);
g.fillRect(100, 10, 60, 50);
}
Р
Для рисования эллипса используется drawOval(), а для его заполнения –
fillOval(). Эти методы имеют форматы:
УИ
void drawOval(int top, int left, int width, int height)
void fillOval(int top, int left, int width, int height)
Пример 1.4
public void paint(Graphics g)
{ g.drawOval(10, 10, 50, 50); БГ
а
g.fillOval(100, 10, 75, 50);
}
ек
void drawArc(int top, int left, int width, int height, int начало, int конец)
ио
void fillArc(int top, int left, int width, int height, int начало, int конец)
часовой стрелки. Дуга рисуется против часовой стрелки, если конец положите-
лен, и по часовой стрелке, если конец отрицателен. Поэтому, чтобы нарисовать
дугу от 12-часового до 6-часового положения, начальный угол должен быть 90°
и угол развертки 180°.
Пример 1.5
public void paint(Graphics g) {
g.drawArc(0, 40, 70, 70, 0, 75);
g. fillArc (0, 40, 70, 70, 0, 75); }
10
Работа с цветом
Работа с цветом поддерживается классом Color. В Color определено не-
сколько цветовых констант (например color.black), специфицирующих ряд
обычных цветов. Возможно также создание собственных цветов с применением
одного из цветовых конструкторов. Обычно используются следующие его фор-
маты:
Р
Пример 1.6
УИ
new Color(255, 100, 100); // светло-красный
БГ
го плана. Можно изменить этот цвет, вызывая метод setColor() класса Graphics:
Color getColor()
т
Пример 1.7
Листинг файла DrawHouseApplet.java
бл
import java.awt.*;
import java.applet.*;
public class DrawHouseApplet extends Applet {
Би
Р
g.drawRect(170, 200, 60, 100);
g.drawLine(200, 200, 200, 300);
УИ
g.drawLine(170, 250, 230, 250);
g.setColor(Color.MAGENTA);
g.drawString("Домик", 190, 30); }
БГ
}
<HTML>
т
<HEAD>
</HEAD>
ио
<BODY BGCOLOR="000000">
<CENTER>
<APPLET code = "DrawHouseApplet.class" width = "500"
бл
height = "300">
</APPLET>
</CENTER>
Би
</BODY>
</HTML>
12
Р
УИ
Рис. 1.2. Результаты работы апплета DrawHouseApplet
БГ
В программе ниже демонстрируется рисование строк и графических объ-
ектов разными цветами в апплете.
а
Пример 1.8
Листинг AppletSample.java
ек
import java.awt.*;
import java.applet.*;
т
//для полигона
int poly_y[]={205,225,245,265,245,225,205};//y-координаты
//для полигона
бл
// цветом
g.drawLine(100, 30, 100, 100);//нарисовать линию
g.drawRect(200, 30, 60, 50);//нарисовать прямоугольник
g.fillRect(200, 30, 60, 50);//нарисовать заполненный прямоугольник
g.setColor(Color.red);//выбрать красный цвет
g.drawString("Red Color", 10, 130 );//нарисовать текст желтым
//цветом
g.drawOval(100, 130, 50, 50); //нарисовать овал
g.fillOval(200, 130, 75, 50);//нарисовать заполненный овал
13
g.drawArc(300, 130, 70, 70, 0, 75);//нарисовать дугу окружности
g.fillArc(400, 130, 70, 70, 0, 75);//нарисовать заполненную дугу
Color c1 = new Color(100, 100, 255);//создать собственный цвет
g.setColor(c1);//выбрать собственный цвет
g.drawString("Own Color", 10, 200 );//нарисовать текст собственным
//цветом
g.drawPolygon(poly_x,poly_y,poly_x.length);//нарисовать многоугольник
}
}
Листинг AppletSample.html
Р
<HTML>
<HEAD>
УИ
</HEAD>
<BODY BGCOLOR="000000">
<CENTER>
БГ
<APPLET
code = "AppletSample.class"
width = "500"
height = "300"
а
>
ек
</APPLET>
</CENTER>
</BODY>
т
</HTML>
Результат работы показан на рис. 1.3.
ио
бл
Би
Р
3. Создать классы Point и Triangle. Объявить массив из n объектов класса
Point. Написать функцию, определяющую какие из точек находятся внутри, а
УИ
какие – снаружи треугольника. Нарисовать их разными цветами.
4. Создать классы Point и Rectangle. Объявить массив из n объектов клас-
са Point. Написать функцию, определяющую какие из точек находятся внутри, а
какие – снаружи прямоугольника. Нарисовать их разными цветами.
БГ
5. Определить класс Line для прямых линий, проходящих через точки
A(x1,y1) и B(x2,y2). Создать массив объектов класса Line. Определить, используя
функции, какие из прямых линий пересекаются, а какие − совпадают. Нарисо-
а
вать все пересекающиеся прямые одним цветом, непересекающиеся − другим.
6. Создать класс Triangle. Определить, какие из m-введенных треуголь-
ек
внутри окружности, а какие − вне. Реализовать ввод данных для объекта Circle
и случайное задание данных для объектов Point.
9. Создать свой собственный класс рисования трехмерных прямоуголь-
бл
15
13. Создать класс HumanFace с различными возможностями: улыбаю-
щийся, печальный, злой, разное положение бровей, губ, волос.
14. Разработать апплет, выполняющий роль справочной таблицы по хи-
мическим элементам, в соответствии с периодической системой Д. И. Менде-
леева.
15. Реализовать визуализацию решения квадратного уравнения. Постро-
ить на экране график квадратичной функции с заданными коэффициентами,
отметить точки пересечения с осью абсцисс, надписать на оси значения корней.
Р
УИ
БГ
а
ек
т
ио
бл
Би
16
ЛАБОРАТОРНАЯ РАБОТА №2
Многопоточное программирование
В отличие от большинства других машинных языков Java обеспечивает
встроенную поддержку для многопоточного программирования. Многопоточ-
Р
ная программа содержит две и более части, которые могут выполняться одно-
временно, конкурируя друг с другом. Каждая часть такой программы называет-
УИ
ся потоком, а каждый поток определяет отдельный путь выполнения (в после-
довательности операторов программы).
Потоки существуют в нескольких состояниях. Поток может быть в со-
БГ
стоянии выполнения. Может находиться в состоянии готовности к выполне-
нию, как только он получит время CPU. Выполняющийся поток может быть
приостановлен, что временно притормаживает его действие. Затем приостанов-
ленный поток может быть продолжен (возобновлен) с того места, где он был
а
остановлен. Поток может быть блокирован в ожидании ресурса. В любой мо-
мент выполнение потока может быть завершено. После завершения поток не
ек
Приоритеты потоков
Java назначает каждому потоку приоритет, который определяет порядок
ио
Таблица 2.1
Некоторые методы класса Thread
Р
Метод Значение
УИ
getName () Получить имя потока
getPriority() Получить приоритет потока
isAlive () Определить, выполняется ли еще поток
БГ
join () Ждать завершения потока
run() Указать точку входа в поток
sleep () Приостановить поток на определенный период времени
start () Запустить поток с помощью вызова метода run ()
а
ек
Р
//создать поток 3 run() //код
//запустить поток 3 { //потока …
УИ
} //код }
//потока …
}
Синхронизация потоков БГ
Рис. 2.1. Программа, порождающая три потока
void myMethod ()
{synchronized (this)
{…………….}}
19
2. Если нет доступа к классу, в котором объявлен метод, то для его син-
хронизации можно использовать следующий прием:
synchonized (object)
{ // операторы критического участка, в том числе и вызовы метода}
Р
ные средства межпроцессового взаимодействия. Например, метод
УИ
public final void wait ( ) throws InterruptedException;
БГ
рый другой поток не введет notify().
Существуют и другие варианты метода, например:
Метод
т
пробуждает все потоки, для которых вызван wait( ), и первым будет выполнять-
ся поток с наибольшим приоритетом.
Рассмотрим несколько примеров программ с использованием потоков.
Пример 2.1 является модификацией примера апплета, приведенного в ла-
бораторной работе №1 (см. пример 1.7). Листинг кода ниже демонстрирует, как
можно нарисовать тот же домик с использованием потоков.
20
Пример 2.1
Листинг файла DrawHouseThreadApplet.java
import java.awt.*;
import java.applet.*;
Р
//функция инициализации апплета
public void init()
УИ
{
this.setBackground(Color. white);
t = new Thread(this);
БГ
t.start();
}
//функция перерисовки апплета
public void paint(Graphics g)
а
{
ек
g.setColor(Color.DARK_GRAY);
if(level == 1)
{
т
{
g.drawLine(50, 150, 200, 50);
g.drawLine(200, 50, 350, 150);
Би
Р
g.drawLine(170, 250, 230, 250);
g.setColor(Color.MAGENTA);
УИ
g.drawString("Домик", 190, 30);
}
}
//тело потока
public void run()
{
БГ
а
System.out.println("Run");
ек
while(true)
{
level ++;
т
repaint();
try{
ио
Thread.currentThread().sleep(3000);
}
catch(Exception ex){}
бл
if(level == 4)
{
return;
Би
}
}
}
}
Файл DrawHouseThreadApplet.html
<HTML>
<HEAD>
22
</HEAD>
<BODY bgcolor=white>
<CENTER>
<h1><font color=lightblue> <I>House</I></font></h1>
<APPLET
code = "DrawHouseThreadApplet.class"
width = "400"
height = "400"
>
</APPLET>
Р
</CENTER>
</BODY>
УИ
</HTML>
Пример 2.2
Листинг TryPriorThread.java
БГ
public class TryPriorThread extends Thread{
а
public TryPriorThread(String threadName){
super(threadName);
ек
}
catch(InterruptedException e){
System.out.print("Error:"+e);
Би
}
}
}
public static void main(String [ ] args){
// создать три потока выполнения
Thread min_thr = new TryPriorThread("ThreadMin");
Thread max_thr = new TryPriorThread("ThreadMax");
Thread norm_thr = new TryPriorThread("ThreadNorm");
System.out.println("Starting threads...");
23
min_thr.setPriority(Thread.MIN_PRIORITY); //задать потоку
//минимальный приоритет
//задать потоку максимальный приоритет
max_thr.setPriority(Thread.MAX_PRIORITY);
//задать потоку нормальный приоритет
norm_thr.setPriority(Thread.NORM_PRIORITY);
min_thr.start(); // запустить первый поток
max_thr.start(); // запустить второй поток
norm_thr.start(); // запустить третий поток
}
Р
}
УИ
Результат работы программы:
Thread 'ThreadMin' created!
Thread 'ThreadMax' created!
БГ
Thread 'ThreadNorm' created!
Starting threads...
Thread 'ThreadMax' 0
Thread 'ThreadNorm' 0
а
Thread 'ThreadMin' 0
ек
Thread 'ThreadMax' 1
Thread 'ThreadMax' 2
Thread 'ThreadMax' 3
т
Thread 'ThreadMax' 4
Thread 'ThreadMax' 5
ио
Thread 'ThreadMax' 6
Thread 'ThreadMax' 7
Thread 'ThreadMax' 8
бл
Thread 'ThreadMax' 9
Thread 'ThreadNorm' 1
Thread 'ThreadMin' 1
Би
Thread 'ThreadNorm' 2
Thread 'ThreadMin' 2
Thread 'ThreadNorm' 3
Thread 'ThreadMin' 3
Thread 'ThreadNorm' 4
Thread 'ThreadMin' 4
Thread 'ThreadNorm' 5
Thread 'ThreadMin' 5
Thread 'ThreadNorm' 6
24
Thread 'ThreadMin' 6
Thread 'ThreadNorm' 7
Thread 'ThreadMin' 7
Thread 'ThreadNorm' 8
Thread 'ThreadMin' 8
Thread 'ThreadNorm' 9
Thread 'ThreadMin' 9
Р
Пример 2.3
Листинг SynchroThreads.java
УИ
import java.io.*;
public class SynchroThreads{
public static void main(String [ ] args){
БГ
SynchroFile sf= new SynchroFile(); //объект класса SynchroFile
FileThread ft1=new FileThread("FisrtThread",sf); //первый поток
FileThread ft2=new FileThread("SecondThread",sf); //второй поток
ft1.start(); //стартовать первый поток
а
ft2.start(); //стартовать второй поток
ек
}
}
class FileThread extends Thread{
т
String str;
SynchroFile sf;
ио
}
public void run(){
for(int i=0;i<10;i++){
Би
sf.writing(str,i);
}
}
}
class SynchroFile{
File f=new File("file.txt");
public SynchroFile(){
System.out.println("Object SynchroFile creating...");
try{
25
f.delete(); //удалить файл, если он есть
f.createNewFile(); //создать новый файл
}
catch(IOException ioe){
ioe.printStackTrace();
}
}
public synchronized void writing(String str,int i){
try{
RandomAccessFile raf=new RandomAccessFile(f,"rw");
Р
raf.seek(raf.length()); //переместить указатель в конец
System.out.print(str);
УИ
raf.writeBytes(str); //записать в файл
// на случайное значение приостанавить поток
Thread.sleep((long)(Math.random()*15));
БГ
raf.seek(raf.length()); //переместить указатель в конец
System.out.print("->"+i+" \n");
raf.writeBytes("->"+i+" \n"); //записать в файл
}
а
catch(IOException ioe){
ек
ioe.printStackTrace();
}
catch(InterruptedException ie){
т
ie.printStackTrace();
}
ио
FisrtThread->0
SecondThread->0
FisrtThread->1
SecondThread->1
FisrtThread->2
SecondThread->2
FisrtThread->3
SecondThread->3
FisrtThread->4
26
SecondThread->4
FisrtThread->5
SecondThread->5
FisrtThread->6
SecondThread->6
FisrtThread->7
SecondThread->7
FisrtThread->8
SecondThread->8
FisrtThread->9
Р
SecondThread->9
УИ
В каталоге приложения будет создан файл file.txt, дублирующий инфор-
мацию, выведенную на экран.
Следующий пример демонстрирует применение потоков в апплете. Соз-
БГ
дается апплет, в разных потоках осуществляется движение строки, квадрата и
овала, а также зарисовка фона апплета.
Пример 2.4
а
Листинг AppletThreadSample.java
ек
import java.awt.*;
import java.applet.*;
//класс апплета, который реализует интерфейс Runnable
т
//объявление переменных
private ShapeString m_ShapeString = null; //для строки
private ShapeOval m_ShapeOval = null; //для овала
бл
Р
m_ShapeString.x_String,m_ShapeString.y_String);
//прорисовка квадрата
УИ
g.setColor(Color.red);
g.drawRect(m_ShapeRect.x_Rect,m_ShapeRect.y_Rect,
m_ShapeRect.w_Rect,m_ShapeRect.h_Rect);
БГ
//прорисовка овала
g.setColor(Color.CYAN);
g.fillOval(m_ShapeOval.x_Oval,m_ShapeOval.y_Oval,
m_ShapeOval.w_Oval,m_ShapeOval.h_Oval);
а
}
//класс ShapeString, реализующий интерфейс Runnable
ек
for(;;){
x_String+=15; //изменение координаты строки
try{
T.sleep(1000); //приостановка работы потока на 1000 миллисекунд
}
catch (InterruptedException e){}
}
}
}
28
//класс ShapeRect реализующий интерфейс Runnable
class ShapeRect implements Runnable{
Thread T;
int x_Rect,y_Rect,w_Rect,h_Rect; //координаты и размеры квадрата
public ShapeRect(){ //конструктор
T = new Thread(this); //создание объекта Thread
//установление начальных координат квадрата
x_Rect=350;y_Rect=50;w_Rect=100;h_Rect=100;
T.start();//запуск потока (вызов метода run)
}
Р
public void run(){ //метод run
for(;;){
УИ
x_Rect-=15; //изменение координаты квадрата
try{
T.sleep(500); //приостановка работы потока на 1000 миллисекунд
БГ
}
catch (InterruptedException e){}
}
}
а
}
//класс ShapeOval реализующий интерфейс Runnable
ек
Направление
Направление движения
движения квадрата
строки
Р
УИ
Направление
движения
овала
БГ
Рис. 2.2. Результат работы программы AppletThreadSample.java
а
ек
30
6. Составить программу вывода на экран дисплея изображения летящего
самолета.
7. Составить программу вывода на экран дисплея изображения пушки. В
правой части экрана появляется и исчезает случайным образом мишень. Нажа-
тием кнопки производится выстрел из пушки. Момент попадания фиксируется
в виде взрыва.
8. Составить программу вывода в верхней части экрана дисплея движу-
щегося слева направо парусника с постоянной скоростью. Ее значение всякий
раз задается генератором случайных чисел. В нижней части экрана дисплея
расположена пушка. При нажатии кнопки происходит выстрел торпедой с по-
Р
стоянной скоростью. При попадании торпеды в пушку смоделировать взрыв
парусника и его исчезновение. При промахе парусник достигает правой грани-
УИ
цы экрана дисплея и начинает движение сначала с новой постоянной скоро-
стью.
9. Составить программу вывода на экран дисплея схематичного изобра-
БГ
жения лыжника. При нажатии кнопки он начинает движение классическим
стилем.
10. Составить программу вывода на экран дисплея схематичного челове-
ка в положении готовности осуществить прыжок в длину. При нажатии кнопки
а
спортсмен начинает разбег и выполняет такой прыжок.
11. Составить программу вывода изображения циферблата механических
ек
крыльями.
15. Составить программу вывода на экран дисплея трех вложенных друг
в друга окружностей, представляющих собой беговые дорожки. На линию стар-
та выходят три спортсмена (произвольные фигуры). При нажатии кнопки уча-
стники стартуют с одинаковой угловой скоростью. После старта угловые ско-
рости участников забега изменяются по случайному закону. На финише указать
место, занятое каждым участником забега.
31
ЛАБОРАТОРНАЯ РАБОТА №3
События
В основу Java-программирования наряду с другими положен механизм
обработки событий.
Р
Событие – это объект, который описывает изменение состояния источни-
ка (нажатие кнопки, выбор пункта меню, разворачивание, сворачивание окош-
УИ
ка, нажатие клавиши и т.д.). Источник – это объект, генерирующий события.
Одно и то же событие может быть значимым для одних объектов и несущест-
венным для других.
БГ
В Java различают два механизма обработки событий:
1) с помощью метода handleEvent() (применялся до версии jdk 1.1 (Java
1.0));
2) с помощью модели делегирования событий.
а
Далее будем рассматривать особенности обработки событий с примене-
нием второго механизма. В соответствии с моделью делегирования событий в
ек
Классы событий
Би
32
Таблица 3.1
Классы событий
Класс событий Описание
ActionEvent Генерируется, когда нажата кнопка, дважды
щелкнут элемент списка или выбран пункт меню
AdjustmentEvent Генерируется при манипуляциях с полосой про-
крутки
ComponentEvent Генерируется, когда компонент скрыт, переме-
щен, изменен в размере или становится види-
мым
Р
ContainerEvent Генерируется, когда компонент добавлен или
удален из контейнера
УИ
FocusEvent Генерируется, когда компонент получает или те-
ряет фокус
ItemEvent Генерируется, когда помечен флажок или эле-
БГ
мент списка, сделан выбор элемента в списке,
выбран или отменен элемент меню с меткой
KeyEvent Генерируется, когда получен ввод с клавиатуры
MouseEvent Генерируется, когда объект перетащен мышью
а
(dragged), перемещен (moved), произошел щел-
ек
Класс ActionEvent
Определяет четыре целочисленные константы, которые можно использо-
вать для идентификации любых модификаторов, связанных с событием дейст-
Би
33
src – ссылка на объект, который генерирует события (для следующих
описываемых классов значение аналогичное);
type – тип события (для следующих описываемых классов значение ана-
логичное);
cmd – командная строка события;
modifiers – указывает, какие клавиши-модификаторы были нажаты при
генерации события (Alt, Ctrl, Shift ).
Например, когда кнопка нажата, генерируется action-событие, которое
имеет имя команды, равное метке или надписи на этой кнопке.
Р
FocusEvent
Событие этого класса идентифицируется константой FOCUS_GAINED и
УИ
FOCUS_LOST. Конструкторы класса:
БГ
FocusEvent ( Component src, int type, boolean temporaryFlag );
temporaryFlag – устанавливается как true, если cобытие фокуса времен-
ное, иначе – false.
а
ItemEvent
Существует два типа Item-событий, которые определяются константами:
ек
Конструктор класса:
KeyEvent
Имеется три типа Key-событий, которые идентифицируются тремя
константами:
KEY_PRESSED – клавиша нажата;
KEY_RELEASED – клавиша отпущена;
34
KEY_TYPED – генерируется только при нажатии символьной клавиши.
Конструктор класса:
KeyEvent ( Component src, int type, long when, int modifiers, int code);
when – параметр, передающий конструктору системное время, когда была
нажата клавиша (для следующего вписываемого класса значение аналогичное);
modifiers – параметр, указывающий, какие модификаторы были нажаты
вместе с клавишей;
code – параметр, передающий конструктору код клавиши.
Р
MouseEvent
УИ
Существует семь типов Mouse-событий, которые идентифицируются се-
мью константами:
БГ
MOUSE_CLICKED – пользователь щелкнул кнопкой мыши;
MOUSE_DRAGGED – пользователь перетащил мышь;
MOUSE_ENTERED – указатель мыши введен в компонент;
MOUSE_EXITED – указатель мыши выведен из компонента;
а
MOUSE_MOVED – мышь передвинута;
MOUSE_PRESSED – кнопка мыши нажата;
ек
Конструктор класса:
ио
MouseEvent (Component src, int type, long when, int modifiers, int x, int y, int
clicks, boolean triggersPopup );
x, y – координаты мыши;
бл
TextEvent
TEXT_VALUE_CHANGED – событие, определяющее ввод текста пользо-
вателем в текстовое поле.
Конструктор класса:
Р
Конструктор класса:
УИ
WindowEvent (Window src, int type);
Метод Window getWindow() возвращает Window-объект, который сгенери-
БГ
ровал это событие.
Элементы-источники событий
В табл. 3.2 приведены некоторые элементы-источники событий, приме-
а
няемые в Java, и их описание.
Таблица 3.2
ек
Элементы-источники событий
Источник событий Описание
т
1 2
Button (кнопка) Генерирует action-события в тот момент, когда
ио
нажимается кнопка
Checkbox (флажок) Генерирует item-события, когда флажок устанав-
ливается/сбрасывается
бл
36
Окончание табл. 3.2
1 2
TextField и TextArea Генерирует text-события, когда пользователь вводит
(текстовое поле и тек- символ
стовая область)
Window (окно) Генерирует window-события, когда окно активизи-
руется, закрывается, деактивизируется, сворачивает-
ся в пиктограмму, разворачивается из пиктограммы,
открывается или выполняется выход из него (quit)
Р
Интерфейсы прослушивания событий
Модель делегирования событий содержит две части: источник событий и
УИ
блоки прослушивания событий. Блоки прослушивания событий создаются пу-
тем реализации одного или нескольких интерфейсов прослушивания событий.
Эти интерфейсы определены в пакете java.awt.event. Когда событие происхо-
БГ
дит, источник события вызывает соответствующий метод, определенный бло-
ком прослушивания, и передает ему объект события в качестве параметра.
В табл. 3.3 приведены интерфейсы прослушивания событий и их методы.
Когда класс реализует какой-нибудь из этих интерфейсов, то все методы ин-
а
терфейса должны быть реализованы в этом классе. В случае, если среди мето-
ек
дов интерфейса вам необходимы не все, а только некоторые из них, то для ос-
тальных методов в качестве реализации следует оставить пустые скобки {}.
т
Таблица 3.3
Интерфейсы прослушивания событий
ио
37
Окончание табл. 3.3
1 2
KeyListener Определяет три метода, распознающих события
клавиатуры
void keyPressed(KeyEvent ke)
void keyReleased(KeyEvent ke)
void keyTyped(KeyEvent ke)
MouseListener Определяет пять методов, распознающих события
щелчка, входа в границы компонента, выхода из
границ, нажатия, отпускания клавиши мыши
Р
void mouseClicked(MouseEvent me)
УИ
void mouseEntered(MouseEvent me)
void mouseExited(MouseEvent me)
void mousePressed(MouseEvent me)
void mouseReleased(MouseEvent me)
БГ
MouseMotionListener Определяет два метода, распознающих события пе-
ретаскивания перемещения мыши
void mouseDragged(MouseEvent me)
void mouseMoved(MouseEvent me)
а
TextListener Определяет один метод, связанный с событием из-
ек
38
Класс Window
Создает окно верхнего уровня на рабочем столе. Он расширяется классом
Frame, который и представляет интерфейсное окно, окно с меню, обрамлением,
необходимое для создания графического приложения с его компонентами.
Класс Frame
Инкапсулирует полноценное окно, имеющее строку заголовка, строку
меню, обрамление и углы, изменяющие размеры окна.
Для создания окна Frame существуют два конструктора:
Р
Frame ();
УИ
Frame ( String Zagolovok);
Пример 3.1
import java.awt.*;
бл
Р
Элементы управления Label, Button, Checkbox, Choice, List, Scrollbar
УИ
Элемент управления – это компоненты, которые предоставляют пользова-
телю различные способы взаимодействия с приложением (например кнопки,
флажки, полосы прокрутки и т.п.)
БГ
Элементы управления представлены следующими классами:
Label – с помощью класса Label можно создавать текстовые строки в окне
Java-программ. По умолчанию текст будет выровнен влево, но, используя методы
а
setAligment (Label.CENTER );
ек
setAligment (Label.RIGHT );
выводимый текст либо при создании объекта класса Label, либо создать пустой
объект и уже затем определить его текст вызовом метода setText( ).
ио
Р
super("Фреймовое окно с кнопкой");
setLayout(new FlowLayout(FlowLayout.LEFT));
УИ
btn=new Button("Нажмите кнопку");
setSize(300,200);
btn.addActionListener(this);
БГ
lb=new Label("Здесь текстовое поле");
count=0;
add(btn);
add(lb);
а
setVisible(true);
ек
addWindowListener(this);
}
public void actionPerformed(ActionEvent ae) {
т
count++;
lb.setText("Кнопка нажата "+count+" раз");
ио
}
public void windowClosing(WindowEvent we){
this.dispose();
бл
}
public void windowActivated(WindowEvent we){};
public void windowClosed(WindowEvent we){};
Би
Р
Пример реализации списка из трех пунктов.
УИ
Пример 3.3
Choice choice = new Choice ( );
choice.addItem (“First”);
БГ
choice.addItem (“Second”);
choice.addItem (“Third”);
пункты выбора.
Создать объект класса List можно двумя способами:
1. Создать пустой список и добавить в него пункты методом addItem().
бл
Пример 3.4
Би
42
Пример 3.5
List list2 = new List (2, true );
list2.addItem (“1”);
list2.addItem (“2”);
list2.addItem (“3”);
Некоторые полезные методы класса List:
String getItem(int) – получить текст пункта с номером int;
int countItems( ) – посчитать количество пунктов в списке;
void clear( ) – очистить список;
void delItem(int) – удалить из списка пункт с номером int;
Р
void delItems(int, int) – удалить из списка элементы с int по int;
int getSelectedIndex( ) – получить порядковый номер выделенного элемен-
УИ
та списка;
void select(int) – выделить элемент списка с определенным номером.
БГ
Следующий пример демонстрирует обработку списка, раскрывающегося
списка и кнопки с независимой фиксацией.
Пример 3.6
а
Листинг ListDemo.java
ек
import java.awt.*;
import java.awt.event.*;
public class ListDemo extends Frame implements ItemListener{
т
super("Фреймовое окно");
setLayout(new FlowLayout(FlowLayout.CENTER));
setSize(300,200);
бл
Р
можно следующим образом:
new Scrollbar ( );
УИ
new Scrollbar ( Scrollbar.VERTICAL );
new Scrollbar ( <ориентация>, <текущее значение>, <видно>, <минималь-
ное значение>, <максимальное значение>);
БГ
<ориентация> – ориентация полосы, которая задается константами Scroll-
bar.HORIZONTAL, Scrollbar.VERTICAL.
<текущее значение> – начальное значение, в которое помещается бегунок
полосы прокрутки;
а
<видно> – сколько пикселов прокручиваемой области видно и на сколько
пикселов эта область будет прокручена при щелчке мышью на полосе прокрутки;
ек
Р
void replaceText(String, int, int) – заменить текст между заданными на-
чальной и конечной позициями.
УИ
Следующий пример демонстрирует приложение с элементами управле-
ния: кнопкой (Button), списком (List), раскрывающимся списком(Choice), тек-
стовой строкой (Label), текстовым полем (TextField). Введенное в текстовом
БГ
поле слово при нажатии кнопки добавляется как в список, так и в раскрываю-
щийся список. Также реализован механизм закрытия фрейма.
Пример 3.7
а
Листинг GUISample.java
import java.io.*; //импортирование пакета ввода-вывода
ек
Р
/*регистрация блока прослушивания событий типа WindowEvent*/
addWindowListener(new WindowClose());
УИ
/*регистрация блока прослушивания событий типа ActionEvent*/
b1.addActionListener(new ButtonAdd());
}
БГ
/*объявление класса-адаптера для обработки Window-событий*/
class WindowClose extends WindowAdapter {
/*метод, который вызывается при закрытии окна*/
public void windowClosing(WindowEvent we) {
а
setVisible(false); //фрейм-окно становится невидимым
ек
}
}
/*объявление класса для обработки Action-событий (класс ButtonAdd реа-
т
l1.add(tf1.getText(),2);
}
}
static public void main(String args[]){ //объявление метода main()
GUISample MyFrame=new GUISample(); //создание экземпляра класса
//GUISample
MyFrame.setVisible(true); //выведение окна на экран дисплея
}}
46
Результаты работы программы представлены на рис. 3.1.
Текстовая строка
Список
Текстовое поле
Р
Раскрывающийся
УИ
список Кнопка
БГ
Рис. 3.1. Результат работы программы
а
Диалоговые окна
ек
Пример 3.8
Листинг Frame1.java
import java.awt.*;
import java.awt.event.*;
public class Frame1 extends Frame
implements ActionListener,WindowListener{
Menu file;MenuItem item1;
Р
public Frame1(){
super("Фреймовое окно с меню");
УИ
setSize(500,300);
//создать строку главного меню и добавить его во фрейм
MenuBar mbar=new MenuBar();
БГ
setMenuBar(mbar);
//создать элемент меню
file=new Menu("File");
mbar.add(file);
а
file.add(item1=new MenuItem("DemoDialog"));
ек
item1.addActionListener(this);
setVisible(true);
addWindowListener(this);
т
}
public void actionPerformed(ActionEvent ae) {
ио
this.dispose();
}
public void windowActivated(WindowEvent we){};
Би
Р
public void actionPerformed(ActionEvent ae){
this.dispose();
УИ
}
}
}
БГ
На рис. 3.2 показан результат работы программы:
а
Меню Фреймовое
ек
окно с меню
т
Диалоговое
ио
окно
с кнопкой
бл
Би
49
совой стрелке: из первого – во второй, из второго в третий, из третьего в пер-
вый. Элемент при перемещении должен исчезать из одного списка и появ-
ляться в другом. Помимо того приложение должно обеспечивать управление
вторым списком – добавление нового элемента, редактирование, удаление.
2. Разработать приложение управления тремя списками, расположенны-
ми горизонтально. Приложение должно обеспечивать перемещение выбранного
элемента из первого во второй, из второго в третий, из третьего в первый спи-
сок и наоборот. Направление перемещения элемента из списка в список должно
определяться выбором из набора флажков (CheckboxGroup). Элемент при пе-
ремещении должен исчезать из одного списка и появляться в другом. Помимо
Р
того, приложение должно обеспечивать управление всеми списками – добавле-
ние нового элемента, редактирование, удаление.
УИ
3. Разработать приложение, обеспечивающее возможность множествен-
ного выбора элементов из списка. Выбранные элементы должны образовывать
строку текста и помещаться в текстовое поле. Предусмотреть возможность вы-
БГ
вода сообщения в диалоговое окно (Dialog) в случае, если суммарное количе-
ство символов будет превышать 100.
4. Разработать приложение, реализующее калькулятор. Приложение
должно иметь строку редактирования (TextField), набор кнопок 0…9, кнопки
а
арифметических действий – суммирование, вычитание, деление, умножение,
память.
ек
ся, что несколько строк может иметь такие фрагменты). Помимо этого, прило-
жение должно обеспечивать управление содержимым списков – добавление но-
вого элемента, редактирование, удаление.
Би
Р
действие необходимо выполнить: суммирование, вычитание, деление, умноже-
ние, очистку окон редактирования.
УИ
11. Разработать приложение управления тремя списками («Фамилия»,
«Имя», «Отчество») и строки редактирования (TextField). В строку редактиро-
вания вводится информация в формате «Фамилия Имя Отчество». По заверше-
БГ
нии ввода фамилия должна появиться в списке «Фамилия», имя – в списке
«Имя», отчество – в списке «Отчество». Предусмотреть вывод сообщения в
диалогое окно (Dialog), если количество введенных в списки ФИО будет пре-
вышать 10.
а
12. Разработать приложение управления тремя списками («Фамилия»,
«Имя», «Отчество») и строки редактирования (TextField). В строку редактиро-
ек
51
15. Разработать приложение управления тремя списками («Фамилия»,
«Имя», «Отчество») и строкой редактирования (TextField). Для отображения
строки редактирования вызывается диалоговое окно (Dialog). В строку редак-
тирования вводится информация в формате «Фамилия Имя Отчество». По за-
вершении ввода диалоговое окно закрывается, фамилия должна появиться в
списке «Фамилия», имя – в списке «Имя», отчество – в списке «Отчество». Пре-
дусмотреть возможность множественного выбора фамилий и записи их в от-
сортированном порядке в четвертый список.
Р
УИ
БГ
а
ек
т
ио
бл
Би
52
ЛАБОРАТОРНАЯ РАБОТА №4
Интерфейс JDBC
Разумеется, организовать доступ к базам данных для современного языка
программирования в наше время не представляет никакой сложности. Более того,
Р
и сами языки программирования более всего оцениваются разработчиками по ти-
пу и возможностям заложенных в них средств доступа к базам данных, удобству и
УИ
полноте интерфейсов. В этом смысле Java не представляет исключения. Уже в
версии JDK1.1 появился пакет классов java.sql, обеспечивающий большинство
функций, известных к тому времени разработчикам ODBC-приложений (Open Da-
БГ
taBase Connectivity). В этом пакете содержится ряд замечательных классов, на-
пример java.sql.CallableStatement, который обеспечивает выполнение на Java хра-
нимых процедур; java.sql.DatabaseMetaData, который исследует базу данных на
предмет ее реляционной полноты и целостности с получением самых разнообраз-
а
ных данных о типах и содержимом таблиц, колонок, индексов, ключей и т.д.; на-
ек
БГ
а
ек
т
ио
бл
Даже беглого взгляда на рис. 4.2 вполне достаточно, чтобы понять – об-
щая схема взаимодействия интерфейсов в Java напоминает схему ODBC с ее
гениальным изобретением драйвер-менеджера к различным СУБД и единого
универсального пользовательского интерфейса. ODBC взят в качестве основы
JDBC из-за его популярности среди независимых поставщиков программного
обеспечения и пользователей.
JDBC API − это естественный Java-интерфейс к базовым SQL-абстракциям.
Восприняв основные абстракции концепции ODBC, он реализовался как настоящий
Java-интерфейс, согласующийся с остальными частями системы Java.
54
В отличие от интерфейса ODBC JDBC организован намного проще. Глав-
ной его частью является драйвер, поставляемый фирмой JavaSoft для доступа из
JDBC к источникам данных. Этот драйвер является самым верхним в иерархии
классов JDBC и называется DriverManager.
JDBC Driver Manager − это основной ствол JDBC-архитектуры. Его пер-
вичные функции очень просты − соединить Java-программу и соответствую-
щий JDBC-драйвер.
Согласно установившимся правилам Internet, база данных и средства ее
обслуживания идентифицируются при помощи URL (Uniform Resourse Locator).
В самом общем случае URL описывает электронный ресурс, такой как страница
Р
WWW или файл на сервере FTP (File Transfer Protocol – протокол передачи
файлов), способом, который уникальным образом идентифицирует этот ресурс.
УИ
JDBC же использует URL для идентификации расположений как драйверов, так
и источников данных. URL для JDBC имеют следующий формат:
БГ
jdbc: <подпротокол>://<идентификатор источника данных>
где jdbc указывает, что URL ссылается на источник данных JDBC. Подпрото-
кол определяет используемый драйвер JDBC. Например, может применяться
а
драйвер odbc. Идентификатор источника данных определяет источник дан-
ек
jdbc:odbc: dBaseTestStudent
ио
jdbc:dcenaming:accounts-payable,
или
Би
jdbc:dbnet://ultra1:1789/state
Р
Типы драйверов в JDBC
Взаимодействие между приложением Java и СУБД осуществляется с по-
УИ
мощью драйверов JDBC, обеспечивающих реализацию общих интерфейсов для
конкретных СУБД и конкретных протоколов.
В JDBC определяются четыре типа драйверов:
БГ
Тип 1 – драйвер, использующий другой прикладной интерфейс, в частно-
сти ODBC, для работы с СУБД (так называемый JDBC-ODBC-мост). Стандарт-
ный драйвер типа 1 sun.jdbc.odbc.JdbcOdbcDriver входит в JSDK.
Тип 2 − драйвер, работающий через нативные библиотеки (т.е. клиента)
а
СУБД.
Тип 3 – драйвер, работающий по сетевому и не зависимому от СУБД
ек
в тех случаях, когда у СУБД нет своего драйвера JDBC, зато есть драйвер ODBC.
Р
для СУБД DB2.
УИ
2. Установка соединения с базами данных в виде:
Connection cn=
DriverManager.getConnection
БГ
(“jdbc:mysql://localhost/mydb”,”login”,”pass”);
или
Connection cn=
DriverManager.getConnection(“jdbc:odbc:Konditerskaya”);
а
В результате будет возвращен объект Connection и будет установлено со-
ек
4. Выполнение запроса
Результаты выполнения запроса помещаются в объект класса ResultSet:
ResutSet rs=st.executeQuery(“SELCT * FROM mytable”);
57
Для добавления или изменения информации в таблице вместо метода ex-
ecuteQuery() запрос помещается в метод executeUpdate().
5. Обработка результатов выполнения запроса производится методами
интерфейса ResultSet, где самыми распространенными являются next() и get-
String(), а также методы getDate(), getInt(), getShort(), getBytes(), getFloat(), get-
Time(), getDouble(), getLong(), getClob(), getBlob(). Среди них следует выделить
методы getClob() и getBlob(), позволяющие извлекать из полей таблицы специ-
фические объекты (Character Large Object, Binary Large Object), которые могут
быть, например, графическими или архивными файлами. Эффективным спосо-
бом извлечения значения поля из таблицы является обращение к этому полю по
Р
его позиции в строке.
При первом вызове метода next() указатель перемещается на таблицу ре-
УИ
зультатов выборки в позицию первой строки таблицы ответа. Когда строки за-
кончатся, метод возвратит false.
6. Закрытие соединения
cn.close();
БГ
Если база больше не нужна, соединение закрывается.
Пример 4.1
ио
Листинг DBClass.java
import java.awt.*; // импортирование пакета awt
import java.net.*; // импортирование пакета для работы в сети
бл
Р
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");// подключение
//интерфейса JAVA-ODBC, без которого JAVA не сможет связаться
УИ
//с установленным ODBC-драйвером.
Connection db=DriverManager.getConnection(url); // установление
//соединения с базой данных
БГ
while(true){//бесконечный цикл
menu();//вывод пунктов меню
Statement sq=db.createStatement();//cоздание объекта
//для передачи запросов
а
String vybor = stdin.readLine();// чтение строки, вводимой с клавиатуры
if(vybor.equalsIgnoreCase("1")){// выполнение, если введено «1»
ек
massa=rs.getShort("Massa");
System.out.println("|"+naim+"\t|"+nazv+"\t|"+cena+"\t|"+massa+"\t|");
} }
else if (vybor.equalsIgnoreCase("2")){// выполнение, если введено «2»
System.out.println("Mogete dobavit' novuyu produkciyu:");
System.out.println("Vvedite naimenovanie:");
naim=in.readLine();// чтение наименования, вводимого с клавиатуры
System.out.println("Vvedite nazvanie:");
nazv=in.readLine();// чтение названия, вводимого с клавиатуры
59
System.out.println("Vvedite cenu:");
cena=in.readLine();// чтение цены, вводимой с клавиатуры
System.out.println("Vvedite massu:");
// чтение массы, вводимой с клавиатуры
massa=Integer.parseInt(in.readLine());
// формирование строки запроса
String sq_str="INSERT INTO Assortiment VALUES
('"+naim+"','"+nazv+"','"+
cena+"',"+massa+")";
int rs= sq.executeUpdate(sq_str); // команда на выполнение запроса
Р
}
else if (vybor.equalsIgnoreCase("3")){// выполнение, если введено «3»
УИ
System.out.println("Mogete udalit' assortiment:");
System.out.println("Vvedite naimenovanie assortimenta:");
naim=in.readLine();// чтение наименования, вводимого с клавиатуры
БГ
// формирование строки запроса
String sq_str="DELETE FROM Assortiment WHERE Naimenovanie
='"+naim+"'";
int rs= sq.executeUpdate(sq_str); // команда на выполнение запроса
а
}
else if (vybor.equalsIgnoreCase("4")){ // выполнение, если введено «4»
ек
String vibor;
System.out.println("Vvedite naimenovanie assortimenta,kotoroe hotite redakti-
т
rovat");
vibor=in.readLine();// чтение наименования, вводимого с клавиатуры
ио
Р
}
УИ
Для запуска приложения необходимо сначала в Microsoft Access создать
таблицу Assortiment, которая должна содержать следующие поля (табл. 4.1):
БГ
Таблица 4.1
Описание таблицы Assortiment
Имя поля Тип данных
Naimenovanie Текстовый
а
Nazvanie Текстовый
ек
Cena Денежный
Massa Числовой
т
Таблица 4.2
Данные таблицы Assortiment
бл
Р
4-Redaktirovanie
5-Vyhod
УИ
Введем например «1». Появится
|Naimenovanie |Nazvanie |Massa |Cena|
|Tort |Napoleon |50.0000 |2000 |
БГ
|Pirognoe |Oduvanchik |5.0000 |100 |
|Rulet |Oreshek |10.0000 |500 |
|Pirognoe |Zavarnoe |4.0000 |150 |
Vyberite punkt menu:
а
1-Prosmotr assortimenta
ек
2-Vstavka
3-Udalenie
4-Redaktirovanie
т
5-Vyhod
Далее, выбирая соответствующие пункты меню, можно добавить, уда-
ио
62
1. Разработать подсистему учета и регистрации проживающих в гости-
нице. Использовать классы CheckBox, List, диалог поиска.
2. Разработать подсистему учета и регистрации нормативных докумен-
тов предприятия. Использовать классы Choice, TextArea, диалог о программе.
3. Разработать подсистему учета и регистрации продаж телевизоров в
магазине техники. Использовать классы CheckboxGroup, Choice, диалог под-
тверждения удаления.
4. Разработать подсистему учета и регистрации информации об успевае-
мости студентов. Использовать классы CheckBox, TextArea, диалог добавления
оценок.
Р
5. Разработать подсистему учета и регистрации автомобилей в ГАИ. Ис-
пользовать классы CheckBox, List, диалог поиска.
УИ
6. Разработать подсистему учета и регистрации поступлений цветов в
цветочный магазин. Использовать классы List, Choice, диалог подтверждения
обновления.
БГ
7. Разработать подсистему учета и регистрации расхода стройматериалов.
Использовать классы Checkbox, Choice, диалог фильтрации.
8. Разработать подсистему учета и регистрации прибыли от выполняе-
мых ремонтных работ. Использовать классы TextArea, List, диалог выбора ра-
а
бот, где размещены 2 списка и кнопки управления этими списками.
9. Разработать подсистему учета и регистрации величины выплат фир-
ек
о программе.
11. Разработать подсистему учета и регистрации затрат на рекламу пар-
фюмерной фирмы. Использовать классы Checkbox, Choice, диалог фильтрации
бл
по затратам.
12. Разработать подсистему учета и регистрации посещений поликлиники
больными. Использовать классы TextArea, Choice, диалог фильтрации.
Би
63
Литература
Р
Графика, JavaBeans, интерфейс пользователя / Х. М. Дейтел, П. Дж. Дейтел,
С. И. Сантри. – СПб. : BHV − Санкт-Петербург, 2000.
УИ
6. Дейтел, Х. М. Технологии программирования на Java 2. В 3 кн. Кн. 3:
Корпоративные системы, сервлеты, JSP, Web-сервисы / Х. М. Дейтел,
П. Дж. Дейтел, С. И. Сантри. – СПб. : BHV − Санкт-Петербург, 2000.
7. Флэнаган, Д. Java: справочник / Д. Флэнаган; пер. с англ. – М. : Символ,
2004.
БГ
8. Вязовик, В. С. Программирование на Java: курс лекций для вузов по
спец. I - 35 14 00 «Приклад. информатика» / В. С. Вязовик. – М. : Интернет-
университет информ. технологий, 2003.
а
9. Лабораторный практикум по курсу «Разработка информационных сис-
ек
64
Св. план 2008, поз. 123
Учебное издание
Р
УИ
ЯЗЫКИ ПРОГРАММИРОВАНИЯ ДЛЯ РАЗРАБОТКИ СЕТЕВЫХ
ПРИЛОЖЕНИЙ: ЯЗЫК ПРОГРАММИРОВАНИЯ JAVA
БГ
ЛАБОРАТОРНЫЙ ПРАКТИКУМ
для студентов специальностей
I-27 01 01 «Экономика и организация производства»,
а
I-26 02 03 «Маркетинг»
дневной формы обучения
ек
т
В 2-х частях
ио
Часть 2
бл
Редактор Т. П. Андрейченко
Корректор Е. Н. Батурчик
Би
65