Similar presentations:
Прикладне програмування. Методичні вказівки до лабораторних занять для студентів спеціальності
1.
Міністерство освіти і науки УкраїниПРИКЛАДНЕ ПРОГРАМУВАННЯ
Методичні вказівки до лабораторних занять
для студентів спеціальності
121 "Інженерія програмного забезпечення"
денної форми навчання
Луцьк 2016
2.
УДК 004.432(07)П 5.03
Рекомендовано до видання Навчально-методичною радою факультету комп’ютерних наук та
інформаційних технологій Луцького НТУ, протокол № __ від __ листопада 2016 року.
________________ Голова навчально-методичної ради факультету комп’ютерних наук та
інформаційних технологій
Розглянуто і схвалено на засіданні кафедри комп’ютерних технологій Луцького НТУ,
протокол № __ від __ листопада 2016 року.
Укладач:
_____________ Андрущак І. Є., д.т.н., доцент Луцького НТУ
(підпис)
Рецензент: В.Д. Рудь, доктор технічних наук, професор Луцького НТУ
Відповідальний за випуск: О.О. Герасимчук, завідувач кафедри комп’ютерних технологій,
кандидат технічних наук, доцент
П 5.03
Прикладне програмування [Текст]: методичні вказівки до лабораторних занять
для студентів спеціальності 121 «Інженерія програмного забезпечення» денної
форми навчання / уклад. І.Є. Андрущак. – Луцьк: Луцький НТУ, 2016. – 104 с.
Видання містить методичні рекомендації до проведення лабораторних занять з
навчальної дисципліни «Прикладне програмування» з зазначенням питань для самостійної
роботи та необхідної літератури для здійснення підготовки.
Призначений для студентів спеціальності 121 «Інженерія програмного забезпечення»
денної форми навчання.
© І.Є. Андрущак, 2016
2
3.
ЗМІСТМета та завдання курсу…………………………………...………………….....4
Лабораторне заняття №1. Базові поняття мови програмування Java ...…...5
Лабораторне заняття №2. Створення методів та класів у Java.…….........12
Лабораторне заняття №3. Робота з масивами в Java.....................................25
Лабораторне заняття №4. Створення віконного інтерфейсу ……………...33
Лабораторне заняття №5. Графічні компоненти Java ………………….....42
Лабораторне заняття №6. Обробка подій в мові Java ……………………..54
Лабораторне заняття №7. Створення аплетів ………….....……………..... 67
Лабораторне заняття №8. Робота з базами даних за допомогою JDBC…..89
Література……………………………………………………………………….102
3
4.
МЕТА ТА ЗАВДАННЯ КУРСУКурс «Прикладне програмування» є складовою частиною нормативнометодичного забезпечення навчального процесу для підготовки бакалаврів
спеціальності 121 «Інженерія програмного забезпечення»
денної форми
навчання.
Зміст дисципліни передбачає лекції, лабораторні заняття та самостійну
роботу студентів. Форма семестрового контролю екзамен.
Курс «Прикладне програмування» спрямований на формування у
студентів уявлень про теоретичні аспекти технологій створення прикладних
програм із застосуванням мови кросплатформенного програмування Java, а
також на формування практичних умінь і навичок розробки таких прикладних
додатків, як аплети, елементів графічного інтерфейсу користувача (GUI),
сервлети тощо.
Мета викладання курсу «Прикладне програмування» – засвоїти основні
принципи створення java-програм, прийоми програмування в JAVA для
подальшого практичного використання в подальшій професійній діяльності.
Завдання курсу – допомогти студентам оволодіти уміннями,
які
необхідні для ефективної організації практичної діяльності при створенні
прикладних додатків різної складності, закласти основи математичного
мислення студентів у процесі створення власних програм, навчити розробляти
та застосовувати типові компоненти та приймати оптимальні рішення при їх
проектуванні.
При вивченні та засвоєнні навчальної дисципліни студенти також
застосовують
набуті
знання
з
курсів
«Архітектура та проектування
програмного забезпечення», «Алгоритми і структури даних», «Аналіз вимог до
програмного забезпечення». При вивченні та засвоєнні навчальної дисципліни
студенти також застосовують набуті знання з курсів «Лінійна алгебра та
аналітична геометрія» та «Дискретні структури».
4
5.
Лабораторне заняття № 1Тема роботи: базові поняття мови програмування Java.
Мета роботи: розглянути базові поняття мови програмування Java у
процесі створення перших прикладних програм.
Теоретичні відомості:
NetBeans IDE – вільне інтегроване середовище розробки додатків (IDE) на
мовах програмування Java, JavaFX, Python, PHP, JavaScript, C + +, Ада та ін.
Розробка середовища NetBeans почалася в 1996 році під назвою Xelfi (гра
букв на основі Delphi), в якості проекту студентів зі створення Java IDE під
керівництвом факультету математики та фізики Карлова Університету в Празі. У
1997 році Роман Станек сформував компанію навколо проекту і став випускати
комерційні версії середовища NetBeans до передачі всіх прав на IDE корпорації
Sun Microsystems в 1999 році. Sun відкрила вихідні коди середовища розробки
NetBeans IDE в червні наступного року. NetBeans з тих пір постійно розвивається
і росте завдяки людям і компаніям, що використовують і які підтримують проект.
Версія NetBeans IDE 6.0 була створена на основі попередньої версії 5.5.1 та
на даний час постачається у складі дистрибутивів Ubuntu 8.04 і Debian. NetBeans
IDE 6.5, випущена в листопаді 2008 року. Поточна версія середовища – NetBeans
IDE 6.9.1.
Для розробки програм у середовищі NetBeans і для успішної інсталяції та
роботи самого середовища NetBeans повинен бути попередньо встановлений Sun
JDK або J2EE SDK. Середовище розробки NetBeans з самого початку створення
підтримувала розробку для платформ J2SE і J2EE. Починаючи з версії 6.0
NetBeans підтримує розробку для мобільних платформ J2ME, C ++ , PHP та Ruby
без встановлення додаткових компонентів.
За якістю і можливостями останні версії NetBeans IDE змагається з
найкращим (платним) інтегрованим середовищем розробки на мові Java, таким,
як
IntelliJ
IDEA,
підтримуючи
профілювання,
виділення
синтаксичних
конструкцій кольором, автодоповнення мовних конструкцій «на льоту», шаблони
5
6.
коду та ін .У версії NetBeans IDE 6.1 підтримується UML, SOA, мова програмування
Ruby (включаючи підтримку Ruby on Rails). У версії 6.5 додана підтримка мови
PHP. Також для тестування викладений модуль підтримки Python. NetBeans IDE
підтримує
плагіни,
дозволяючи
розробникам
розширювати
можливості
середовища.
У релізі NetBeans IDE 6.7 була додана інтеграція з Project Kenai, підтримка
мови Groovy та веб-фреймворк Grails. У версії 6.8 – підтримка PHP-фреймворк
Symfony, а в 6.9 – Zend Framework.
NetBeans
IDE
доступна
у
вигляді
готових
дистрибутивів
(прекомпільованих бінарних файлів) для платформ Microsoft Windows, Linux,
FreeBSD, Mac OS X, OpenSolaris і Solaris (як для SPARC, так і для x86 – Intel і
AMD). Для інших платформ доступна можливість скомпілювати NetBeans
самостійно із вихідних текстів.
На ідеях, технологіях і в значній частині на вихідному коді NetBeans IDE
базуються пропоновані фірмою Sun комерційні інтегровані середовища розробки
для Java – Sun Java Studio Creator, Sun Java Studio Enterprise і Sun Studio (для
ведення розробки на C, C + + або Фортран).
Порядок виконання роботи:
1. Запустіть NetBeans IDE 6.9.1.
2. У вікні, що відкрилось виберіть Файл\Создать проект.
Відкриється вікно створення нового проекту. В ньому виберіть категорію
проекту Java, а у вікні Проекты – Приложение Java та натисніть клавішу
Далее (рис.1).
6
7.
Рисунок 1 – Вікно створення проекту3. Задайте ім’я Java-проекту та виберіть папку для його збереження (рис. 2).
В полі Имя проекта задайте назву за наступним зразком: My + Прізвище
студента латиницею1. Наприклад: MyIvanov1.
В полі Расположение проекта виберіть диск, на якому розміщена Ваша
робоча директорія (для цього скористайтесь клавішею Обзор…).
Для збереження введених змін натисніть на клавішу Завершить.
Рисунок 2 – Вікно задання імені проекту
7
8.
4. Відкриється вікно створеного Вами проекту, в лівій частині якоговідображено його загальну структуру, а в робочій області елемент типу
package (пакет з вихідними файлами Java), в якому основний клас (class
Main) та відповідний метод main (рис. 3).
Рисунок 3 – Структура проекту
5. Пропишіть метод для виведення на екран рядка Лабораторна робота № 1
з поясненням у вигляді багаторядкового коментаря (рис. 4).
Рисунок 4 – Оператор виведення даних
8
9.
6. Здійсніть перевірку роботи програми.Для цього в головному меню програми виберіть пункт Выполнить\
Построить главный проект (при повторному використанні
Выполнить\
Очистить и построить главный проект). Після цього натисніть Выполнить\
Запустить главный проект.
В нижній частині програми NetBeans з’явиться вікно виведення результатів
(Вывод) написаного коду (рис. 5).
Рисунок 5 – Вікно виведення результату
7. Напишіть фрагмент коду для виведення в одному рядку двох стрічок з
додаванням символів Unicode (рис. 6). Здійсніть перевірку роботи
програми.
Рисунок 6 – Оператори додавання символів Unicode
8. Задайте п’ять чисел типу int (ціле число) та здійсніть їх виведення в
поєднанні з стрічковими типами даних і символьними константами
(рис. 7).
9
10.
Рисунок 7 – Виведення різнотипових даних9. Визначте особливості здійснення операції ділення при використанні 2
різних типів даних int та double (рис. 8).
Рисунок 8 – Перевірка операції ділення
10. Розгляньте особливості написання в Java арифметичних операцій (рис. 9).
Рисунок 9 – Особливості написання в Java арифметичних операцій
10
11.
11. Використовуючи логічний тип даних Boolean та оператор if напишіть кодпрограми, яка б виводила рядок з інформацією про рівень початкового
розуміння мови Java (рис. 10). Здійсніть перевірку виконання написаного
коду програми.
Рисунок 10 – Рівень початкового розуміння мови Java
12. Напишіть програму виведення послідовності чисел Фібоначі < 50 (рис.
11).
Рисунок 11 – Програма виведення послідовності чисел Фібоначі
13. Здійсніть перевірку роботи програми.
14. Представте електронний варіант лабораторної роботи викладачеві для
звітності.
Вимоги до оформлення звіту:
1. Оформити звіт з зазначенням висновків та захистити роботу (знання
11
12.
використаних у роботі елементів коду Java).Література:
1. Карабин П.Л. Язык программирования Java: Создание интерактивных
приложений для Internet. – М.: Бук-пресс, 2006. – 224 с.
2. Программирование на Java / Вязовик Н.А. – М.: ИНТУИТ.РУ «Интернетуниверситет Информационных Технологий», 2003. – 592 с.
3. Философия Java. Библиотека программиста. 4-е изд. – СПб.: Питер, 2009. –
640 с.
Лабораторне заняття № 2
Тема роботи: створення методів та класів у Java.
Мета роботи: розглянути особливості створення в Java нових методів
та класів.
Теоретичні відомості:
Клас – це шаблон для створення об'єкту. Клас визначає структуру об'єкту і
його методи, створюючі функціональний інтерфейс. В процесі виконання Javaпрограми система використовує визначення класів для створення представників
класів.
Представники
є
реальними
об'єктами.
Терміни
«представник»,
«екземпляр» і «об'єкт» взаємозамінні. Нижче приведена загальна форма
визначення класу.
class ім’я_класу extends ім’я_суперкласу { type
Змінна1_об’єкту:
type Змінна 2_об’єкту:
type Змінна N_об’єкту:
type ім’я методу 1(список_параметрів){ тіло методу;
}
type ім’я методу 2(список_параметрів){ тіло методу;
}
type ім’я методу М (список_параметрів){ тіло методу;
} }
Ключове слово extends вказує на те, що «ім’я_класу» – це підклас класу
«ім’я_суперкласу». На чолі класової ієрархії Java коштує єдиний її вбудований
12
13.
клас – Object. Якщо Ви хочете створити підклас безпосередньо даного класу,ключове слово extends і наступне за ним ім'я суперкласу можна опустити –
транслятор включить їх у Ваше визначення автоматично.
Дані
інкапсулюються
в
клас
шляхом
оголошення
змінних
між
відкриваючою і закриваючою фігурними дужками, що виділяють у визначенні
класу його тіло. Ці змінні оголошуються так, як і оголошувалися локальні змінні
в попередніх прикладах. Єдина відмінність полягає в тому, що їх треба
оголошувати поза методами, зокрема поза методом main. Нижче приведений
фрагмент коду, в якому оголошений клас Point з двома змінними типу int.
class Point { int х, у; }
Як тип для змінних об'єктів можна використовувати як будь-який з
простих типів, так і класові типи.
Оператор new створює екземпляр вказаного класу і повертає посилання на
знову створений об'єкт. Нижче приведений приклад створення і привласнення
змінній р екземпляра класу Point.
Point р = new Point();
Ви можете створити декілька посилань на один і той же об'єкт. Приведена
нижче програма створює два різні об'єкти класу Point і в кожен з них заносить
свої власні значення. Оператор крапка використовується для доступу до змінним
і методам об'єкту.
class TwoPoints {
public static void main(String args[]){
Point p1 = new Point();
Point p2 = new Point();
p1.x = 10;
p1.y = 20;
р2.х = 42;
р2.у = 99;
System.out.println("x = " + p1.x + " у = " + p1.y);
System.out.println("x = " + р2.х + " у = " + р2.у);
} }
В даному прикладі було створено два об'єкти класу Point, і їх змінним х і у
привласнені різні значення.
13
14.
Результат виконання програми:х = 10 у = 20
х = 42 у = 99
Методи – це підпрограми, приєднані до конкретних визначень класів.
Вони описуються усередині визначення класу на тому ж рівні, що і змінні
об'єктів. При оголошенні методу задаються тип поверненого ним результату і
список параметрів. Загальна форма оголошення методу така:
тип ім’я_методу (список формальних параметрів) {
тіло методу:
}
Тип результату, який повинен повернути метод може бути будь-яким, у
тому числі і типом void – в тих випадках, коли повертати результат не потрібно.
Список формальних параметрів – це послідовність пар тип-ідентифікатор,
розділених комами. Якщо в методі параметри відсутні, то після імені методу
повинні стояти порожні круглі дужки.
class Point { int х, у;
void init(int а, int b){
х = а;
У = b;
} }
Виклик методу. У Java всі параметри примітивних типів передаються за
значенням, а це означає, що у методу немає доступу до початкової змінної,
використаної як параметр.
У мові Java не допускається використання в одній або у вкладених
областях видимості двох локальних змінних з однаковими іменами. При цьому
не забороняється оголошувати формальні параметри методів, чиї імена
співпадають з іменами змінних представників.
Розглянемо як приклад версію методу init, в якій формальним параметрам
дані імена х і у, а для доступу до однойменних змінних поточного об'єкту
використовується посилання this.
class Point { int х, у;
void init(int х, int у){
14
15.
this.x = х;this.у = у } }
class TwoPointsInit {
public static void main(String args[]){
Point p1 = new Point();
Point p2 = new Point();
p1.init(10,20);
p2.init(42,99);
System.out.println("x = " + p1.x + " у = • + p-l.y);
System.out.printlnC'x = " + p2.x + " у = • + p2.y); } }
Конструктори. Ініціалізувати всі змінні класу будь-який раз, коли
створюється його черговий представник – досить втомлива річ навіть у тому
випадку, коли в класі є функції, подібні до методу init. Для цього в Java
передбачені спеціальні методи, названі конструкторами.
Конструктор – це метод класу, який ініціалізував новий об'єкт після його
створення. Ім'я конструктора завжди співпадає з ім'ям класу, в якому він
розташований. У конструкторах немає типу поверненого результату. Замінимо
метод init з попереднього прикладу конструктором.
class Point { int х, у;
Point(int х, int у){
this.x = х;
this.у = у;
} }
class PointCreate {
public static void main(String args[]){
Point p = new Point(10,20);
System.out.println("x = " + p.x + " у = " + p.у);
} }
Java дозволяє створювати декілька методів з однаковими іменами, але з
різними списками параметрів. Така техніка називається поєднанням методів
(method overloading). Як приклад приведена версія класу Point, в якій поєднання
методів використане для визначення альтернативного конструктора, який
ініціалізував координати х і у значеннями за замовчуванням (-1).
class Point { int х, у;
Point(int х, int у){
this.x = х;
this.у = у;
}
15
16.
Point() {х = -1;
у = -1;
} }
class PointCreateAlt {
public static void main(String args[]){
Point p = new Point();
System.out.println("x = " + p.x + " у = " + p.y);
} }
В даному прикладі об'єкт класу Point створюється не при виклику першого
конструктора, як це було раніше, а за допомогою другого конструктора без
параметрів.
Результат роботи програми: х = -1 у = -1.
Методи, що використовують поєднання імен, не обов'язково повинні бути
конструкторами. У наступному прикладі в клас Point додано два методи distance.
Функція distance повертає відстань між двома крапками. Одному з суміщених
методів як параметри передаються координати точки х і у, іншому ж ця
інформація передається у вигляді параметра-об'єкту Point.
class Point { int х, у;
Point(int х, int у){
this.x = х;
this. у = у;
}
double distance(int х, int у){
int dx = this.x - х;
int dy = this.у - у;
return Math.sqrt(dx*dx + dy*dy);
}
double distance(Point p){
return distance(p.x, p.y);
} }
class PointDist {
public static void main(String args[]){
Point p1 = new Point(0, 0);
Point p2 = new Point(30, 40);
System.out.println("p1 = " + pi.x + ", " + p1.y);
System.out.println("p2 = " + p2.x + ", " + p2.y);
System.out.println("p1.distance(p2) = " +
p1.distance(p2));
System.out.println("p1.distance(60, 80) = " +
p1.distance(60, 80)); } }
В другій формі методу distance для отримання результату викликається
16
17.
його перша форма.Результат роботи програми:
р1 = 0, 0
р2 = 30, 40
р1.distance(p2) = 50.0
p1.distance(60, 80) = 100.0
Спадковість. В процесі вспадкування класи-нащадки мають можливість
не тільки створювати свої власні змінні і методи, але і успадковувати змінні і
методи
класів-предків.
Класи-нащадки
прийнято
називати
підкласами.
Безпосереднього предка даного класу називають його суперкласом. У черговому
прикладі показано, як розширити клас Point так, щоб включити в нього третю
координату z.
class Point3D extends Point { int z;
Point3D(int x, int у, int z){
this.x = x;
this.у = у;
this.z = z; }
Point3D() {
this(-1,-1,-1);
} }
В даному прикладі ключове слово extends використовується для того, щоб
повідомити транслятору про намір створити підклас класу Point. У цьому класі
не знадобилося оголошувати змінні х і у, оскільки Point3D успадкував їх від
свого суперкласу Point.
Динамічне призначення методів. Як приклад розглянемо два класи, які
мають просту спорідненість підклас-суперклас, при чому єдиний метод
суперкласу заміщений в підкласі.
class A { void callme() {
System.out.println("Inside A's callrne method");
class В extends A { void callme() {
System.out.println("Inside B's callme method");
} }
class Dispatch {
public static void main(String args[]){
A а = new B();
а.callme();
} }
17
18.
Усередині методу main оголошено змінну а класу А, а проініціалізовано їїяк посилання на об'єкт класу В. У наступному рядку відбувається виклик методу
callme. При цьому транслятор перевірить наявність методу callme класу А, а
виконуюча система, побачивши, що насправді в змінній зберігається представник
класу В, викликає не метод класу А, а callme класу В.
Результат роботи цієї програми: Inside B's calime method.
Розглянута форма динамічного поліморфізму часу виконання є одним з
найбільш могутніх механізмів програмування Java, що дозволяють писати
надійний, використовуваний багато разів код.
final. Всі методи і змінні об'єктів можуть бути заміщені за замовчуванням.
Якщо ж Ви хочете оголосити, що підкласи не мають права заміщати певні змінні
і методи Вашого класу, потрібно оголосити їх як final.
final int FILE_NEW = 1;
За загальнопринятою угодою при виборі імен змінних типу final –
використовуються тільки символи верхнього регістру. Використання finalметодів інколи призводить до виграшу в швидкості виконання коду, оскільки
вони не можуть бути заміщені.
finalize. У Java існує можливість оголошувати методи з ім'ям finalize.
Методи finalize аналогічні деструкціям в C++ (ключовий знак ~) і Delphi
(ключове слово destructor). Середовище Java викликає його кожен раз, коли
«збирач сміття» збереться знищити об'єкт цього класу.
static. Іноді потрібно створити метод, який можна було б використовувати
поза контекстом певного об'єкту його класу. Все, що потрібно для створення
даного методу – вказати при його оголошенні модифікатор типу static. Статичні
методи можуть безпосередньо звертатися тільки до інших статичних методів, в
них ні в якому вигляді не допускається використання посилань this і super.
Змінні також можуть мати тип static, вони подібні до глобальних змінних, тобто
доступні з будь-якого місця коду. Усередині статичних методів недопустимі
посилання на змінні представників.
18
19.
abstract. Бувають ситуації, коли потрібно визначити клас, в якому заданаструктура якої-небудь абстракції, але повна реалізація всіх методів відсутня. У
таких випадках можна за допомогою модифікатора типу abstract оголосити, що
деякі з методів обов'язково повинні бути заміщені в підкласах. Будь-який клас,
що містить методи abstract, також повинен бути оголошений, як abstract.
Оскільки у таких класів відсутня повна реалізація, їх представників не можна
створювати за допомогою оператора new. Крім того, не можна оголошувати
абстрактними конструктори і статичні методи. Будь-який підклас абстрактного
класу або зобов'язаний надати реалізацію всіх абстрактних методів свого
суперкласу, або сам повинен бути оголошений абстрактним.
Порядок виконання роботи:
1. Запустіть NetBeans IDE 6.9.1.
2. У вікні, що відкрилось, виберіть Файл\Создать проект.
Відкриється вікно створення нового проекту. В ньому виберіть категорію
проекту Java, а у вікні Проекты – Приложение Java та натисніть клавішу
Далее (рис. 1).
Рисунок 1 – Вікно створення проекту
3. Задайте ім’я Java-проекту та виберіть папку для його збереження (рис. 2).
19
20.
В полі Имя проекта задайте назву за наступним зразком: My + Прізвищестудента латиницею2. Наприклад: MyIvanov2.
В полі Расположение проекта виберіть диск, на якому розміщена Ваша
робоча директорія (для цього скористайтесь клавішею Обзор…).
Для збереження введених змін натисніть на клавішу Завершить.
Рисунок 2 – Вікно задання імені проекту
4. Відкриється вікно створеного Вами проекту, в лівій частині якого
відображено його загальну структуру, а в робочій області елемент типу
package (пакет з вихідними файлами Java) в якому основний клас (class
Main) та відповідний метод main.
5. Пропишіть метод для виведення на екран рядка, який складається з двох
стрічок: Лабораторна робота № 2: + Назва лабораторної роботи (з
поясненням у вигляді багаторядкового коментаря).
6. Пропишіть з наступної стрічки метод для виведення на екран рядка:
Виконав: студент гр. ПНК-31 (ПІБ студента) (з поясненням у вигляді
однорядкового коментаря).
7. Створіть новий Static-метод newmet1 () в якому напишіть програму
порівняння двох цілих чисел (рис. 3) (метод створюємо в класі Main
20
21.
відразу після опису головного методу main).Рисунок 3 – Static-метод
8. Запустіть створену Вами програму на виконання.
В нижній частині програми NetBeans з’явиться вікно виведення результатів
(Вывод), однак виведення результатів виконання програми не відбудеться
(подумайте чому).
9. Пропишіть виклик методу newmet1 ().
Для цього необхідно прописати рядок newmet1 (); в області виведення
результатів виконання програми, тобто в полі методу main (рис. 4).
Рисунок 4 – Виклик методу newmet1()
10. Здійсніть перевірку виконання програми та впевніться, що вона працює.
11. Створіть метод, який здійснює повернення результатів у вигляді суми двох
цілих чисел (рис. 5).
21
22.
Метод suma() – параметризований (містить в собі два параметри у виглядіцілих чисел). Для виведення результату, потрібно прописати його в головному
методі програми з заданням через кому параметрів (обов’язково має бути
відповідність типів даних).
Рисунок 5 – Метод повернення результатів у вигляді суми
12. Створіть новий клас class Pnk, а в ньому метод static void myPnk(), який
здійснює
виведення
рядку-пояснення
про
правопис
знаходяться в інших класах (рис. 6).
Рисунок 6 – Створення класу Pnk
22
методів,
що
23.
13. Створіть новий клас String (це стандартний клас бібліотеки Java), зоб’єктом класу: name="ІМ’Я СТУДЕНТА"; .
14. Здійсніть виведення Вашого імені по буквам (рис. 7).
Для цього використовуємо оператор циклу for, з занесенням в змінну і
довжину імені (name.length()).
Функція charAt(i) повертає певне значення стрічки (букву, цифру тощо) по
заданому індексу (наприклад: 0 => І; 1 => В; 2 => А; 3 => Н).
Рисунок 7 – Код виведення імені по буквам
15. Створіть клас, у якого є статичні змінні (l та m), статичний метод (static
void method(int n)) і блок ініціалізації (рис. 8).
Рисунок 8 – Код класу Static
23
24.
Для ініціалізації методу необхідно здійснити виклик його в головномуметоді main (рис. 9).
Рисунок 9 – Ініціалізація методу
16. Здійсніть перевірку роботи програми.
17. Представте електронний варіант лабораторної роботи викладачеві для
звітності.
Вимоги до оформлення звіту:
1. Оформити звіт з зазначенням висновків та захистити роботу (знання
використаних у роботі елементів коду Java).
Література:
1. Нотон П. JAVA: Справ. руководство: Пер. с англ. / Под ред. А. Тихонова. –
М.:БИНОМ: Восточ. Кн. Компания, 1996: Восточ. Кн. Компания. – 447 с.
2. Баженова И.Ю. Язык программирования Java. – АО «Диалог-МИФИ»,
1997.
3. Философия Java. Библиотека программиста. 4-е изд. – СПб.: Питер, 2009. –
640 с.
4. Нейл Бартлетт, Алекс Лесли, Стив Симкин. Программирование на Java.
Путеводитель.// The Coriolis Group,Inc. – Издательство НИПФ «ДиаСофт
Лтд.», 1996.
24
25.
Лабораторне заняття № 3Тема роботи: робота з масивами в Java.
Мета роботи: розглянути особливості оголошення, визначення та
ініціалізації на мові програмування Java одновимірних та багатовимірних
масивів.
Теоретичні відомості:
Масив – це сукупність змінних одного типу, що зберігаються в суміжних
комірках оперативної пам’яті.
У Java є як одновимірні, так і багатовимірні масиви. Але реалізація масивів
в Java має свої особливості. По-перше масив в Java це об'єкт. Цей об'єкт
складається з розміру масиву (поле length) і власне масиву.
Розглянемо спочатку прості одновимірні масиви базових типів:
int intAry[];
або
int[] intAry;
Подано опис змінної (або поля) intAry – посилання на масив. Відповідно, в
цьому описі розмір масиву не вказується і сам масив не створюється. Як і будьякий інший об'єкт, масив повинен бути створений операцією new:
intAry = new int[10];
Даний запис створює масив з 10 цілих чисел і адреса цього масиву
заносить в intAry. В Java можна об'єднувати опис і ініціалізацію:
int[] intAry = new int[10];
Для масивів є допустимою ініціалізація списком значень:
int intAry[] = {1, 2, 3, 4};
В прикладі описаний масив з 4-х елементів і відразу визначені їх початкові
значення.
Елементи масивів в Java нумеруються починаючи з 0. При зверненні до
елементу масиву його індекси задаються в квадратних дужках. Наприклад:
x = а[3]; // x привласнюється значення 3-го елементу масиву а
intAry[i]= 0; // i-му елементу intAry привласнюється значення 0
25
26.
Java жорстко контролює вихід за межі масиву. При спробі звернутися донеіснуючого елементу масиву виникає IndexOutOfBoundException.
Для двовимірних масивів ставиться не одна пара дужок, а дві, для
тривимірних – три і так далі. Наприклад:
s = someAry[i][0];
tAry[i][j][k]= 10;
Як вже вказувалося, масив є об'єктом, який, зокрема, зберігає поле length –
розмір масиву. Це дозволяє задавати обробку масивів довільного розміру. Нижче
приведений приклад методу, що обчислює суму елементів масиву:
public double sum(double ary[]){
double s = 0;
for ( int i = 0; i < ary.length; i++ ) {
s += ary[i];
}
return s;
}
Одновимірний масив об'єктів – це масив посилань на об'єкти. Відповідно,
потрібно створити як масив, так і самі об'єкти.
Нехай у нас є деякий клас SomeClass і потрібно побудувати масив з 4-х
об'єктів цього класу.
Варіант 1. (явне створення):
SomeClass objAry[] = new SomeClass[4];
for (int j = 0; j < 4; j++ )
objAry[j]= new SomeClass();
Варіант 2. (використання списку ініціалізації):
SomeClass objAry[] = new SomeClass[] {
new SomeClass(),
new SomeClass(),
new SomeClass(),
new SomeClass(),
};
Багатовимірні масиви будуються за принципом «масив в масиві». Масив,
як відомо, є об'єктом. Двовимірний масив – це масив посилань на об'єкти-масиви.
Тривимірний масив – це масив посилань на масиви, які, у свою чергу, є масивами
посилань на масиви.
26
27.
Існують скорочені варіанти створення масиву, які дозволяють відразурозмістити всі необхідні масиви посилань. Крім того, якщо вдається
використовувати списки ініціалізації, то все набагато простіше.
Нехай, наприклад, потрібно створити масив цілих чисел 3*3.
Варіант 1. (явне створення):
int ary[][] = new int[3][3];
Варіант 2. (використання списку ініціалізації):
int ary[][] = new int[][] {
{1, 1, 1}
{2, 2, 2}
{1, 2, 3}
};
У варіанті 1 масив створено, але його елементи мають невизначене
значення. Якщо спробувати їх використовувати, виникне помилка. Потрібно
спочатку зазначити їх значення.
Створимо аналогічний масив об'єктів класу SomeClass.
Варіант 1. (явне створення):
SomeClass ary[][] = new SomeClass[3][3];
for ( int до = 0; до < 3; k++ )
for ( int j = 0; j < 3; j++ )
ary[k][j]= new SomeClass();
Варіант 2. (використання списку ініціалізації):
SomeClass ary[][] = new SomeClass[][] {
{ new SomeClass(), new SomeClass(), new
SomeClass(), }
{ new SomeClass(), new SomeClass(), new
SomeClass(), }
{ new SomeClass(), new SomeClass(), new
SomeClass(), }
};
Кожен масив наступного рівня є самостійним масивом і може мати свій
розмір. Причому, створення таких «непрямокутних» масивів можливе не тільки з
використанням списку ініціалізації, але і явно:
int ary[][]
ary[0]=
ary[1]=
ary[2]=
= new int[3][];
new int[5];
new int[2];
new int[6];
27
28.
Привласнення і копіювання. У наведених вище прикладах ім'я масиву –це змінна-посилання (або поле-посилання), що містить адресу об'єкту масиву.
Тому привласнення таких змінних один одному – це не копіювання масивів, а
копіювання посилань на об'єкти. Наприклад:
int ary[][] = new int[][] {
{1, 1, 1, 1}
{2, 2, 2}
{1, 2, 3, 4, 5}
};
int copyAry[][] = ary;
Загалом до складу стандартної бібліотеки Java входять різноманітні засоби
роботи з масивами. У пакеті java.util є клас Arrays, який забезпечує безліч
корисних операцій над масивами.
Порядок виконання роботи:
1. Запустіть NetBeans IDE 6.9.1.
2. У вікні, що відкрилось виберіть Файл\Создать проект.
Відкриється вікно створення нового проекту. В ньому виберіть категорію
проекту Java, а у вікні Проекты – Приложение Java та натисніть клавішу
Далее (рис. 1).
Рисунок 1 – Вікно створення проекту
28
29.
3. Задайте ім’я Java-проекту та виберіть папку для його збереження (рис. 2).В полі Имя проекта задайте назву за наступним зразком: My + Прізвище
студента латиницею3. Наприклад: MyIvanov3.
В полі Расположение проекта виберіть диск, на якому розміщена Ваша
робоча директорія (для цього скористайтесь клавішею Обзор…).
Для збереження введених змін натисніть на клавішу Завершить.
Рисунок 2 – Вікно задання імені проекту
4. Відкриється вікно створеного Вами проекту, в лівій частині якого
відображено його загальну структуру, а в робочій області елемент типу
package (пакет з вихідними файлами Java) в якому основний клас (class
Main) та відповідний метод main.
5. Пропишіть виведення на екран рядка, який складається з двох стрічок:
Лабораторна робота № 3: + Назва лабораторної роботи.
6. Пропишіть з наступної стрічки виведення на екран рядка:
Виконав:
студент гр. ПНК-31 (ПІБ студента).
7. Задайте масив дисциплін predmety (список ініціалізації), що Вами
вивчаються (3 дисципліни), та здійсніть виведення на екран монітора
елементів заданого масиву (рис. 3).
Масив задається в класі Main, та повинен міститися в межах методу
main().
29
30.
Рисунок 3 – Масив дисциплін8. Створіть масив PREDMETY (спосіб явного створення) та здійсніть
виведення дисципліни, яка Вам найбільше подобається (рис. 4).
Рисунок 4 – Явне створення масиву
9. Створити два масиви (рис. 5):
1) KURATOR (явне створення) – містить 4 елементи – прізвище, з ініціалами
викладачів кафедри КТПН;
2) zvannja (список ініціалізації) – містить 2 елементи (вчені звання викладачів).
Рисунок 5 – Вікно задання двох нових масивів
30
31.
10. Здійсніть виведення (в 2-ох рядках) прізвища та вченого звання куратораВашої групи (рис. 6).
Рисунок 6 – Виведення прізвища та вченого звання куратора
11. Самостійно здійсніть виведення (в 1-му рядку) вченого звання викладача
Лепкого М.І.
Прізвище викладача, аналогічно попередньому пункту, представте як
елемент масиву KURATOR.
12. Створіть безіменний масив символьного типу, в якому виведіть відповідно
посимвольно
наступну
фразу:
СТУДЕНТ:
(ПРІЗВИЩЕ
СТУДЕНТА) (рис. 7).
Рисунок 7 – Безіменний масив символьного типу
13.Створіть багатовимірний масив координат точки (рис. 8).
31
ТА
ІМ’Я
32.
Рисунок 8 – Багатовимірний масив координат точки14. Напишіть програму, яка здійснює виведення на екран монітора
«Трикутника Паскаля» (рис. 9).
Рисунок 9 – Програма виведення «Трикутника Паскаля»
15. Здійсніть перевірку працездатності програми (при необхідності виправте
помилки та доопрацюйте).
16. Представте електронний варіант лабораторної роботи викладачеві для
звітності.
Вимоги до оформлення звіту:
1. Оформити звіт з зазначенням висновків та захистити роботу (знання
32
33.
використаних у роботі елементів коду Java).Література:
1. Нотон П. JAVA: Справ. руководство: Пер.с англ. / Под ред. А. Тихонова. –
М.:БИНОМ: Восточ. Кн. Компания,1996: Восточ. Кн. Компания. – 447 с.
2. Философия Java. Библиотека программиста. 4-е изд. – СПб.: Питер, 2009. –
640 с.
3. Нейл Бартлетт, Алекс Лесли, Стив Симкин. Программирование на Java.
Путеводитель. // The Coriolis Group,Inc. – Издательство НИПФ «ДиаСофт
Лтд.», 1996.
Лабораторне заняття № 4
Тема роботи: створення віконного інтерфейсу.
Мета роботи: розглянути особливості створення на мові програмування
Java вікон з допомогою використання стандартних бібліотек Swing та AWT.
Теоретичні відомості:
Є багато різних графічних систем: MS Windows, X Window System,
Macintosh. У кожній з них свої правила побудови вікон і їх компонентів: меню,
полів для введення, кнопок, списків, смуг прокрутки. Графічні API містять сотні
функцій.
Для полегшення створення вікон та їх компонентів написані бібліотеки
класів: MFC, Motif, OpenLook, Qt, Tk, Xview, OpenWindows і безліч інших.
Кожен клас такої бібліотеки описує відразу цілий графічний компонент,
керований методами цього і інших класів.
У технології Java справа ускладнюється тим, що додатки Java повинні
працювати в будь-якому або хоча б у декількох графічних середовищах.
Потрібна бібліотека класів, незалежна від конкретної графічної системи. У
першій версії JDK дане завдання вирішили наступним чином: були розроблені
інтерфейси, що містять методи роботи з графічними об'єктами. Класи бібліотеки
33
34.
AWT реалізують ці інтерфейси для створення додатків. Програми Javaвикористовують ці методи для розміщення і переміщення графічних об'єктів,
зміни їх розмірів, взаємодії об'єктів.
Бібліотека класів Java, заснованих на peer-інтерфейсах, отримала назву
AWT (Abstract Window Toolkit). При виведенні об'єкта, створеного в додатку Java
і заснованого на peer-інтерфейсі, на екран створюється парний йому (peer-to-peer)
об'єкт графічної підсистеми операційної системи, який і відображається на
екрані. Ці об'єкти тісно взаємодіють під час роботи програми. Тому графічні
об'єкти AWT в кожному графічному середовищі мають вигляд, характерний для
цього середовища: в MS Windows, Motif, OpenLook, OpenWindows, скрізь вікна,
створені в AWT, виглядають як «рідні» вікна.
Саме через таку реалізацію peer-інтерфейсів та інших «рідних» методів,
написаних, в основному, на мові C++, доводиться для кожної платформи
випускати свій варіант JDK.
У версії JDK 1.1 бібліотека AWT була перероблена. До неї додана
можливість створення компонентів, повністю написаних на Java і не залежать від
peer-інтерфейсів. Такі компоненти стали називати «легкими» (lightweight) на
відміну
від
компонентів,
реалізованих
через
peer-інтерфейси,
названих
«важкими» (heavy).
«Легкі» компоненти скрізь виглядають однаково, зберігають заданий при
створенні вигляд (look and feel). Більш того, додаток можна розробити в такий
спосіб, щоб після його запуску можна було вибрати якийсь певний вид: Motif,
Metal, Windows 95 або який-небудь інший, і змінити цей вигляд в будь-який
момент роботи.
Ця цікава особливість «легких» компонентів отримала назву PL&F
(Pluggable Look and Feel) або «plaf».
Була створена велика бібліотека «легких» компонентів Java, названа Swing.
У ній були переписані всі компоненти бібліотеки AWT, так що бібліотека Swing
може використовуватися самостійно, незважаючи на те, що всі класи з неї
34
35.
розширюють класи бібліотеки AWT.Бібліотека класів Swing постачалася як додаток до JDK 1.1. До складу
Java 2 SDK вона включена як основна графічна бібліотека класів, що реалізує
ідею «100% Pure Java», поряд з AWT.
У Java 2 Бібліотека AWT значно розширена додаванням нових засобів
малювання, виведення текстів і зображень, що одержали назву Java 2D, і засобів,
що реалізують переміщення тексту методом DnD (Drag and Drop).
Крім того, в Java 2 включені нові методи вводу-виводу Input Method
Framework і засоби зв'язку з додатковими пристроями вводу-виводу, такими як
світлове перо або клавіатура Брайля, названі Accessibility.
Всі ці засоби Java 2: AWT, Swing, Java 2D, DnD, Input Method Framework і
Accessibility склали бібліотеку графічних засобів Java, названу JFC (Java
Foundation Classes).
Основне поняття графічного інтерфейсу користувача (ГІК) – компонент
(component) графічної системи. Це окремий, повністю повноцінний елемент,
який можна використовувати в графічному інтерфейсі незалежно від інших
елементів. Наприклад, це поле введення, кнопка, рядок меню, смуга прокрутки,
радіокнопка. Саме вікно програми – теж його компонент. Компоненти можуть
бути і невидимими, наприклад, панель, яка об'єднує компоненти, теж є
компонентом.
В AWT компонентом вважається об'єкт класу Component або об'єкт всякого
класу, що розширює клас Component. У даному класі зібрані загальні методи
роботи з будь-яким компонентом графічного інтерфейсу користувача. Він є
центром бібліотеки AWT.
Кожен компонент перед виведенням на екран поміщається в контейнер.
Контейнер «знає» як розмістити компоненти на екрані. Зрозуміло, в мові Java
контейнер – це об'єкт класу Container або будь-якого його розширення. Прямий
спадкоємець цього класу – клас JComponent – вершина ієрархії багатьох класів
бібліотеки Swing.
35
36.
Створивши компонент – об'єкт класу Component або його розширення, сліддодати його до заздалегідь створеному об'єкту класу Container або його
розширення одним з методів add().
Клас Container є невидимим компонентом. Він розширює клас Component.
Таким чином, в контейнер поряд з компонентами можна поміщати контейнери, в
яких знаходяться якісь інші компоненти, досягаючи тим самим великий
гнучкості розташування компонентів.
Основне вікно програми, активно взаємодіє з операційною системою,
необхідно побудувати за правилами графічної системи. Воно повинно
переміщатися по екрану, змінювати розміри, реагувати на дію миші та
клавіатури. У вікні повинні бути, як мінімум, наступні стандартні компоненти:
рядок заголовку (title bar), з лівого боку якого необхідно розмістити
кнопку контекстного меню, а з правого – кнопки згортання і розгортання
вікна і кнопку закриття програми;
необов'язковий рядок меню (menu bar) з випадаючими пунктами меню;
горизонтальна і вертикальна смуги прокрутки (scrollbars);
вікно повинне бути оточене рамкою (border), що реагує на дії миші.
Вікно з цими компонентами в готовому вигляді описуються в класі Frame.
Тому щоб створити вікно, досить зробити свій клас розширенням класу Frame.
Порядок виконання роботи:
1. Запустіть NetBeans IDE 6.9.1.
2. У вікні, що відкрилось виберіть Файл\Создать проект.
Відкриється вікно створення нового проекту. В ньому виберіть категорію
проекту Java, а у вікні Проекты – Приложение Java та натисніть клавішу
Далее (рис. 1).
36
37.
Рисунок 1 – Вікно створення проекту3. Задайте ім’я Java-проекту та виберіть папку для його збереження.
В полі Имя проекта задайте назву за наступним зразком: My + Прізвище
студента латиницею4. Наприклад: MyIvanov4.
В полі Расположение проекта виберіть диск, на якому розміщена Ваша
робоча директорія (для цього скористайтесь клавішею Обзор…).
Для збереження введених змін натисніть на клавішу Завершить.
4. Створіть в Вашому проекті новий клас
My + Прізвище студента
латиницею (наприклад, MyIvanov).
Для цього натисніть правою клавішею миші (ПКМ) на назві пакету
myivanov4 та в меню, що відкрилось виберіть: Создать\Класс Java (рис. 2).
Рисунок 2 – Вікно створення нового класу
37
38.
В наступному вікні (рис. 3) введіть ім’я класу та для остаточногопримінення змін натисніть клавішу Завершить.
Рисунок 3 – Вікно задання імені класу
Перед Вами з’явиться вікно редагування файлу MyFrame.Java.
5. Для того, щоб створити віконний інтерфейс потрібно задати клас з
розширенням JFrame з вказанням повного шляху до Swing-бібліотек, де
знаходиться клас JFrame (рис. 4).
Рисунок 4 – Клас з розширенням JFrame
6. Напишіть параметризований конструктор класу, для відображення вікна,
розміром 800х600, та стандартними кнопками керування (Мінімізувати,
Згорнути, Закрити) (рис. 5).
38
39.
Рисунок 5 – Параметризований конструктор класуsuper (str); – відповідає за виведення назви вікна, що, матиме
стрічковий тип представлення;
setSize(800,600); – метод, що відповідає за задання розмірів вікна в
пікселях;
setVisible(true); – метод, що відповідає за видимість (чи невидимість,
якщо значення false) створюваного нами вікна.
7. Для відображення створеного віконного інтерфейсу потрібно прописати
посилання на створений нами клас MyIvanov в головному методі main.
Для цього переходимо в клас Main, компонента Main.java та прописуємо
там наступний рядок (рис. 6):
Рисунок 6 – Посилання на створений клас MyIvanov
8. Здійсніть перевірку результатів роботи програми.
Якщо Ви все зробили правильно, то перед Вами у процесі виконання
програми з’явиться наступне вікно (рис. 7):
39
40.
Рисунок 7 – Вигляд віконного інтерфейсу9. Здійсніть виведення в вікні інформації про порядковий номер лабораторної
роботи та її назву (рис. 8).
Для введення інформації необхідно прописати новий метод paint, як вхідні
дані для якого задаємо графічний контекст rys. Після цього здійснюємо
прописування усіх необхідних характеристик шрифту (гарнітуру, розмір, колір
тощо),
наприклад,
rys.setFont(new
Font
("Serif",
Font.CENTER_
BASELINE,30));, а далі задаємо текст, який буде виводитись з зазначенням
координат початку прописування (rys.drawString("ЛАБОРАТОРНА РОБОТА
№4:", 250, 100);).
Після цього обов’язково потрібно здійснити імпорт в проект бібліотек awt:
Рисунок 8 – Виведення інформації про лабораторну роботу
40
41.
10. Здійсніть виведення на екран створюваного Вами віконного інтерфейсудвох міток:
1-ша мітка (label1) – містить текст Виконав:, а при наведенні на нього
курсору мишки здійснюється виведення підказки про виконавця лабораторної
роботи (label1.setToolTipText("ст. гр. ПНК-31 Іванов І.І."); ).
2-га мітка (label2) – містить текст Перевірив:, а при наведенні на нього
курсору мишки здійснюється виведення підказки про викладача, який веде
дисципліну (label2.setToolTipText("асистент Кабак В.В."); ).
Для цього необхідно створити клас контейнер (Container), з назвою cont.
Отримуємо ми його за допомогою методу getContentPane().
Метод setLayout() – визначає менеджер компонування, тобто показує як
будуть розміщені елементи в контейнері та відповідно їх розмір.
JLabel – тип змінної що задається – «мітка».
Метод add(); (наприклад, cont.add (label1);) використовується для
додавання мітки в контейнер.
Метод setToolTipText() використовується для виведення так званої
«спливаючої підказки».
Після прописування усіх міток, та завдання підказок до них (рис. 9)
обов’язково потрібно здійснити імпорт в проект бібліотек swing: import
javax.swing.*;
Рисунок 9 – Код виведення міток
41
42.
11.Здійсніть перевірку працездатності програми (при необхідності виправтепомилки та доопрацюйте).
12. Представте електронний варіант лабораторної роботи викладачеві для
звітності.
Вимоги до оформлення звіту:
1. Оформити звіт з зазначенням висновків та захистити роботу (знання
використаних у роботі елементів коду Java).
Література:
1. Программирование на Java / Вязовик Н.А. – М.: ИНТУИТ.РУ «Интернетуниверситет Информационных Технологий», 2003. – 592 с.
2. Баженова И.Ю. Язык программирования Java. – АО «Диалог-МИФИ»,
1997.
3. Нейл Бартлетт, Алекс Лесли, Стив Симкин. Программирование на Java.
Путеводитель. // The Coriolis Group,Inc. – Издательство НИПФ «ДиаСофт
Лтд.», 1996.
Лабораторне заняття № 5
Тема роботи: графічні компоненти Java.
Мета роботи: здійснити закріплення вмінь студентів по створенню на
мові програмування Java віконного інтерфейсу з розглянути особливості
насичення його графічними компонентами.
Теоретичні відомості:
Основний метод малювання drawLine(int x1, int y1, int х2, int y2)
відображає поточним кольором відрізок прямої між точками з координатами
(x1, y1) і (х2, у2). Одного цього методу достатньо, щоб намалювати будь-яку
картину по точках, малюючи кожну точку з координатами (х, у) методом
drawLine (x, у, х, у) і змінюючи кольори від точки до точки. Однак найчастіше
застосовуються наступні графічні примітиви:
42
43.
drawRect(int x, int у, int width, int height) – малює прямокутник зісторонами, паралельними краям екрану, який задається координатами
верхнього лівого кута (х, у), шириною width пікселів і висотою height
пікселів;
draw3DRect(int x, int у, int width, int height, boolean raised) – малює
прямокутник, що ніби-то виділяється із площини промальовування, якщо
аргумент raised рівний true, або ніби-то вдавлений в площину, якщо
аргумент raised рівний false;
drawOval(int x, int у, int width, int height) – малює овал, вписаний в
прямокутник, заданий аргументами методу. Якщо width==height, то
одержимо коло;
drawArc(int x, int у, int width, int height, int startAngle, int arc) – малює
дугу овала, вписаного в прямокутник, який заданий першими чотирма
аргументами. Дуга має величину arc градусів і відраховується від кута
startAngle. Кут відраховується в градусах від осі Ох. Додатній кут
відраховується проти годинникової стрілки, від’ємний – по годинниковій
стрілці;
drawRoundRect (int x, int у, int width, int height, int arcWidth, int
arcHeight) – малює прямокутник із закругленими краями. Закруглення
викреслюються четвертинками овалів, вписаних в прямокутники шириною
arcWidth і висотою arcHeight, які побудовані в кутах основного
прямокутника;
drawPolyline(int[] xPoints, int[] yPoints, int nPoints) – малює ламану з
вершинами в точках xPoints[i], yРoints[i]) і числом вершин nPoints;
drawPolygon(int[] xPoints, int[] yPoints, int nPoints) – малює замкнену
ламану, проводячи замикаючий відрізок прямої між першою і останньою
точками;
drawРolygon(Polygon p) – малює замкнету ламану, вершини якої задані
об’єктом р класу Polygon.
Для виведення тексту в область малювання поточним кольором і шрифтом,
43
44.
починаючи з точки (х, у), в класі Graphics є декілька методів:drawString (String s, int x, int y) – виводить рядок s;
drawBytes(byte[] b, int offset, int length, int x, int у) – виводить length
елементів масиву байтів b, починаючи з індексу offset;
drawChars(chart] ch, int offset, int length, int x, int у) – виводить length
елементів масиву символів ch, починаючи з індексу offset.
Наступний метод виводить текст, занесений в об’єкт класу, реалізуючого
інтерфейс AttributedCharacterІterator. Це дозволяє задавати свій шрифт для
кожного символу:
drawString(AttributedCharacterІterator iter, int x, int y)
Точка (х, у) – це ліва нижня точка першої літери тексту на базовій лінії
(baseline) виведення шрифта.
Метод setFont(Font newFont) класу Graphics встановлює поточний шрифт
для виведення тексту. Метод getFont() повертає поточний шрифт. В мові Java,
шрифт – це об’єкт класу Font. Розглянемо можливості даного класу.
Об’єкти класу Font зберігають накреслення (glyphs) символів, що
утворюють шрифт. Їх можна створити двома конструкторами:
Font (Map attributes) – задає шрифт із заданими аргументом attributes.
Ключі атрибутів i деякі їх значення задаються константами класу
TextAttribute із пакету java.awt.font. Цей конструктор характерний для Java
2D.
Font (String name, int style, int size) – задає шрифт по імені name, із стилем
style і розміром size типографських пунктів. Цей конструктор характерний
для JDK 1.1, але широко використовується і в Java 2D в силу своєї
простоти.
Ім’я шрифту name може бути рядком із фізичним іменем шрифту,
наприклад, "Courier New", або один із рядків "Dialog", "Dialoglnput",
"Monospaced", "Serif", "SansSerif", "Symbol". Це так звані логічні імена шрифтів
(logical font names). Якщо name==null, то задається шрифт по замовчувнню.
Стиль шрифту style – це одна із констант класу Font:
44
45.
BOLD – напівжирний;ITALIC – курсив;
PLAIN – звичайний.
Напівжирний курсив (bolditalic) можна задати операцією побітового
додавання, Font.BOLD|Font.ITALIC. При виведенні тексту логічним іменам
шрифтів і стилям співставляються фізичні імена шрифтів (font face name) або
імена сімейств шрифтів (font name). Це імена реальних шрифтів, наявних у
графічній підсистемі операційної системи. Наприклад, логічному іменi «Serif»
може бути співставлено ім’я сімейства (family) шрифтів Times New Roman, а в
комбінації зі стилями – конкретні фізичні імена Times New Roman Bold, Times
New Roman Italic. Шрифти повинні знаходитися в складі шрифтів графічної
системи тієї машини, на якій виконується додаток. Список імен доступних
шрифтів можна продивитися наступними операторами:
Font[] fnt =
Toolkit.getGraphicsEnvironment.getAHFonts();
for (int i = 0; i< fnt.length; i++)
System.out.println(fnt[i].getFontName());
Встановивши SDK, Ви маєте бути впевнені, що ці шрифти є у Вашій
системі. Таблиці співставлення логічних і фізичних імен шрифтів знаходяться у
файлах з іменами:
font.properties;
font.properties.ar;
font.properties.ja;
font.properties.ru.
Ці файли повинні бути розташовані в JDK в каталозі jdkl.3\jre\lib або в
будь-якому іншому підкаталозі lib кореневого каталогу JDK тієї машини, на якій
виконується додаток. Потрібний файл вибирається віртуальною машиною Java
по закінченні імені файлу. Це закінчення співпадає з міжнародним кодом мови,
встановленого в локалі або в системній властивості user.language. Якщо у вас
встановлена російська локаль з міжнародним кодом мови «ru», то для
співставлення буде вибраний файл font.properties.ru. Якщо такий файл не
45
46.
знайдено, то використовується файл font.properties, що не відповідає ніякійконкретній локалі. Тому можна залишити в системі тільки один файл
font.properties, переписавши в нього зміст потрібного файлу або створивши файл
заново. Для будь-якої локалі буде використовуватися цей файл.
Порядок виконання роботи:
1. Запустіть NetBeans IDE 6.9.1.
2. У вікні, що відкрилось виберіть Файл\Создать проект.
Відкриється вікно створення нового проекту. В ньому виберіть категорію
проекту Java, а у вікні Проекты – Приложение Java та натисніть клавішу
Далее (рис. 1).
Рисунок 1 – Вікно створення проекту
3. Задайте ім’я Java-проекту та виберіть папку для його збереження.
В полі Имя проекта задайте назву за наступним зразком: My + Прізвище
студента латиницею5. Наприклад: MyIvanov5.
В полі Расположение проекта виберіть диск, на якому розміщена Ваша
робоча директорія (для цього скористайтесь клавішею Обзор…).
Для збереження введених змін натисніть на клавішу Завершить.
4. Створіть в Вашому проекті новий клас
My + Прізвище студента
латиницею (наприклад, MyIvanov).
Для цього натисніть правою клавішею миші (ПКМ) на назві пакету
46
47.
myivanov5 та в меню, що відкрилось, виберіть: Создать\Класс Java (рис. 2).Рисунок 2 – Вікно створення класу
В вікні, що відкриється, введіть ім’я класу та для остаточного задання змін
натисніть клавішу Завершить.
Перед Вами з’явиться вікно редагування файлу MyIvanov.Java.
5. Створіть віконний інтерфейс.
Для цього в створеному класі MyIvanov потрібно задати новий клас з
розширенням JFrame з прописуванням повного шляху до Swing-бібліотек, де
знаходиться клас JFrame. Після цього необхідно написати параметризований
конструктор класу, для відображення вікна розміром 800х600 з стандартними
кнопками управління (Мінімізувати, Згорнути, Закрити) (рис. 3).
Рисунок 3 – Параметризований конструктор класу
super (str); – відповідає за виведення назви вікна, що матиме
стрічковий тип представлення;
setSize(800,600); – метод, що відповідає за задання розмірів вікна в
пікселях;
47
48.
setVisible(true); – метод, що відповідає за видимість створюваноговікна.
6. Пропишіть посилання на створений клас MyIvanov в головному методі
main.
Для цього переходимо в клас Main, компонента Main.java та прописуємо
там наступний рядок (рис. 4):
Рисунок 4 – Посилання на створений клас MyIvanov
7. Здійсніть перевірку результатів роботи програми.
Якщо Ви все зробили правильно, то перед Вами у процесі виконання
програми з’явиться наступне вікно (рис. 5):
Рисунок 5 – Інтерфейс створеного вікна
8. Здійсніть виведення на екрані створюваного Вами віконного інтерфейсу
48
49.
мітки label1 з текстом Назва лабораторної роботи: та спливаючоюпідказкою Графічні компоненти Java.
Для цього необхідно створити клас Container, наприклад з назвою cont.
Отримуємо ми його за допомогою методу getContentPane(). Нагадаємо основні
методи при створенні міток:
setLayout() – визначає менеджер компонування, тобто показує як
будуть розміщені елементи в контейнері та відповідно їх розмір;
JLabel – тип змінної що задається – «мітка»;
add (); – використовується для додавання міток в контейнер.
Метод setToolTipText() використовується для виведення «спливаючої
підказки».
Після прописування мітки та завдання підказки до неї (рис. 6) обов’язково
потрібно здійснити імпорт в проект бібліотек swing: import javax.swing.*;
Рисунок 6 – Код відображення мітки
9. Створіть в класі MyIvanov текстове поле з назвою text та помістіть за
замовчуванням туди текст Графічні компоненти Java (Послідовність
створення аналогічна створенню мітки та показана на рис. 7).
49
50.
Рисунок 7 – Створення текстового поля10. Створіть три кнопки типу CheckBox з назвами check1, check2 та check3 та
надписами Червоний, Синій, Жовтий (рис. 8).
Вони будуть використовуватись для здійснення заливки фону створеного
нами попередньо текстового поля.
Рисунок 8 – Створення кнопок типу CheckBox
11. Створіть новий клас Handler (звернення до його елементів показано на
рис. 8),
в якому з використанням оператора if…else задайте дію при
відміченні певної кнопки (рис. 9).
50
51.
Програма діє наступним чином: коли кнопка відмічена, то відбуваєтьсяпроцес «заливки» фону текстового поля відповідним кольором, коли ж мітка
знята – встановлюється фон за замовчуванням (білий).
Рисунок 9 – Обробник дій кнопки
Обов’язково потрібно здійснити імпорт в проект бібліотек: import
java.awt.*; import java.awt.event.*; .та import javax.swing.*;
12. Створіть об’єкт типу ComboBox (список, що розгортається) та задайте дію
на відмічення елементів списку – заливка вибраним кольором текстового
поля (наприклад, text.setBackground(Color.red);) (рис. 10).
Рисунок 10 – Обробник подій списку
51
52.
13. Задайте виведення на екран Вашого вікна надпису ПОБУДОВАГЕОМЕТРИЧНИХ ФІГУР (шрифт відображення та необхідні відступи
тексту вказані на рис. 11).
Необхідно прописати новий метод paint, як вхідні дані для нього задаємо
графічний контекст rys. Після цього здійснюємо прописування усіх необхідних
характеристик шрифту (гарнітуру, розмір, колір тощо), наприклад, rys.setFont
(new Font ("Tahoma", Font.CENTER_BASELINE,35));, а далі задаємо текст,
який буде виводитись з зазначенням координат початку прописування
(rys.drawString("ПОБУДОВА ГЕОМЕТРИЧНИХ ФІГУР", 100,150);).
Рисунок 11 – Обробник подій списку
14. Здійсніть побудову наступних геометричних фігур:
а) коло помаранчевого кольору (rys.setColor(Color.ORANGE);) з координатами
центру (250, 200) та діаметром 300 пікселів (rys.drawOval(250, 200, 300, 300);).
(Насправді ж будується овал вписаний у квадрат, розміри якого 300х300);
б) прямокутник зі сторонами, паралельними краям екрану, з координатами
верхнього лівого кута (240,190), шириною 320 пікселів і висотою 320 пікселів
(rys.drawRect(240,190,320,320););
в) овал, вписаний в прямокутник (rys.drawOval(250, 280, 300, 150);), grayкольору;
г) прямокутник із закругленими краями (rys.drawRoundRect (225, 180, 350,
350, 25, 25);) з координатами верхнього лівого кута (225, 180), шириною 350
52
53.
пікселів і висотою 350 пікселів кольору MAGENTA та заокругленням 25х25пікселів (рис. 12).
Рисунок 12 – Код для промальовування графічних компонентів
15. Здійсніть перевірку працездатності програми (при необхідності виправте
помилки та доопрацюйте).
Інтерфейс програми представлений на рис. 13.
Рисунок 13 – Інтерфейс програми
16. Представте електронний варіант лабораторної роботи викладачеві для
звітності.
53
54.
Вимоги до оформлення звіту:1. Оформити звіт з зазначенням висновків та захистити роботу (знання
використаних у роботі елементів коду Java).
Література:
1. Нотон П. JAVA: Справ. руководство: Пер.с англ. / Под ред. А. Тихонова. –
М.:БИНОМ: Восточ. Кн. Компания, 1996: Восточ. Кн. Компания. – 447 с.
2. Программирование на Java / Вязовик Н.А. – М.: ИНТУИТ.РУ «Интернетуниверситет Информационных Технологий», 2003. – 592 с.
Лабораторне заняття № 6
Тема роботи: обробка подій в мові Java.
Мета роботи: ознайомитись з особливостями створення та обробки
подій в мові програмування Java.
Теоретичні відомості:
Подія (event)
в бібліотеці AWT виникає при дії на компонент
маніпуляціями мишки, при введенні з клавіатури, при переміщенні вікна,
зміні його розмірів тощо. Об’єкт, в якому відбулася подія, називається
джерелом (source) події. Всі події в AWT класифіковані. При виникненні
події, виконуюча система Java автоматично створює об’єкт відповідного
класу. Цей об’єкт не виконує ніяких дій, він тільки зберігає всі дані про події.
На чолі ієрархії класів -подій стоїть клас Eventobject пакету java.util –
безпосереднє розширення класу Object. Ієрархію класів-подій показано на
рис.1. Всі класи, відображені на рисунку, крім класу AWTEvent, зібрані в
пакет java.awt.event. Події типу ComponentEvent, FосusEvent, KeyEvent,
MouseEvent виникають у всіх компонентах. А події типу ContainerEvent –
тільки в контейнерах: Container, Dialog, FileDialog, Frame, Panel, Scroll Pane,
Window.
54
55.
Рисунок 1 – Ієрархія класів-подійПодії типу WindowEvent виникають тільки у вікнах: Frame, Dialog,
FileDialog, Window.
Події типу TextEvent генеруються тільки в контейнерах: Textcomponent,
TextArea, TextField.
Події типу ActionEvent проявляються тільки в контейнерах: Button, List,
TextField.
Події типу ItemEvent виникають тільки в контейнерах: Checkbox, Choice,
List, а події типу AdjustmentEvent виникають тільки в контейнері Scrollbar.
Дізнатись, в якому об ’єкті відбулася подія , можна методом getSource()
класу Eventobject. Цей метод повертає тип Оbject. В кожному з цих класівподій визначений метод paramstring(), повертаючий вміст об ’єкта даного класу
у вигляді рядка String. Крім того, в кожному класі є свої методи, постачаючі ті
чи інші відомості про події. Зокрема, метод getio() повертає ідентифікатор
(identifier) події – ціле число, що означає тип події. Ідентифікатори події
визначені в кожному класі-події як константи.
Методи обробки подій описані в інтерфейсах-слухачах (listener). Для
кожного типу подій, крім inputEvent, є свій інтерфейс. Імена інтерфейсів
складаються з імені події і слова Listener, наприклад, ActionListener,
MouseListener.
Методи
інтерфейсу
«слухають»,
що
відбувається
в
потенційному джерелі події. При виникненні події ці методи автоматично
виконуються, одержуючи в якості аргументу об’єкт-подію і використовуючи
при обробці відомості про події, що містяться в цьому об’єкті.
55
56.
Щоб задати обробку події певного типу, треба реалізувати відповіднийінтерфейс. Щоб зв’язатися з обробником події, класи-джерела події повинні
отримати посилання на екземпляр eventHandler класу-обробника події одним
із методів addXxxListener(XxxEvent eventHandier), де Хох – ім’я події. Такий
спосіб реєстрації, при якому слухач залишає «візитну карточку» джерелу для
свого виклику при виникненні події, називається зворотнім викликом
(callback).
Зворотня дія – відмова від обробника, переривання прослуховування –
виконується методом removeXxxListener(). Таким чином, компонент -джерело,
в якому відбулася подія, не займається його обробкою. Він звертається до
екземпляра класу-слухача, вміючого обробляти події, делегує (delegate) йому
повноваження по обробці.
Така схема отримала назву схеми делегування (delegation). Вона зручна
тим, що ми можемо легко змінити клас-обробник і опрацювати подію поіншому
або
призначити
декілька обробників однієї й тієї ж події. З
іншого боку, ми можемо один обробник призначити на прослуховування
декількох об’єктів-джерел подій.
Обробка подій миші. Подія MouseEvent виникає в компоненті по одній із
семи причин:
натискання кнопки миші – ідентифікатор MOUSE_PRESSED;
відпускання кнопки миші – ідентифікатор MOUSE_RELEASED;
клік кнопкою миші – ідентифікатор M OUSE_CLICKED (натискання і
відпускання не відрізняються);
переміщення миші – ідентифікатор MOUSE_MOVED;
переміщення миші з натисненою кнопкою – ідентифікатор MOUSE_
DRAGGED;
поява курсору миші в компоненті – ідентифікатор MOUSE_ENTERED;
вихід курсору миші із компонента – ідентифікатор MOUSE_EXITED .
Для їх обробки є сім методів у двох інтерфейсах:
56
57.
public interface MouseListener extendsEventListener{
public void
mouseClicked(MouseEvent
e); public void
mousePressed(MouseEvent e)
; public void
mouseReleased(MouseEvent
e); public void
mouseEntered(MouseEvent e);
public void
mouseExited(MouseEvent e);
}
public interface MouseMotionListener extends
EventListener{
public void mouseDrag ged(MouseEvent e);
public void mouseMoved(MouseEvent e);
}
Ці методи можуть одержати від аргументу е координати курсор у миші в
системі координат компонента методами e.getx(), e.gety(), або одним методом
e.getPoint(), повертаючим екземпляр класу Point. Подвійний клік кнопкою
миші
можна
відслідкувати
методом e.getСІickСount(), повертаючим
кількість кліків. При переміщенні миші повертається 0. Взнати, яка кнопка
була натиснута, можна за допомогою методу e.getModifiers() класу inputEvent
порівнянням з наступими статичними константами класу inputEvent:
BUTTON1_MASK – натиснута перша кнопка, зазвичай ліва;
BUTTON2_MASK – натиснута друга кнопка, зазвичай середня, або
одночасно обидві кнопки на двокнопковій мишці;
BUTTON3_MASK – натиснута третя кнопка, зазвичай права.
Обробка подій клавіатури. Подія KeyEvent відбувається в компоненті по
будь-якій із трьох причин:
натиснута клавіша – ідентифікатор KEY_PRESSED;
відпущена клавіша – ідентифікатор KEY_RELEASED ;
введений символ – ідентифікатор KEY_TYPED.
Остання подія виникає із-за того, що деякі символи вводяться
натисканням
декількох
клавіш,
наприклад,
57
великі
літери
вводяться
58.
комбінацією клавіш <Shift>+<літера>. Натискання функціональних клавіш,наприклад <F1>, не викликає подію KEY_TYPED. Обробляються ці події
трьома методами, описаними в інтерфейсі:
public interface KeyListener extends EventListener{
public void keyTyped(KeyEvent e); public void
keyPressed(KeyEvent e); public void
keyReleased(KeyEvent e);
}
Метод e.getKeyChar() повертає символ Unicode типу char, зв’язаний з
клавішею. Якщо з клавішею не зв’язаний ніякий символ, то повертається
константа CHAR_UNDEFINED. Метод e.getKeyCode() повертає код клавіші у
вигляді цілого числа типу int.
В класі KeyEvent визначені коди всіх клавіш у вигляді констант, названих
віртуальними кодами клавіш (virtual key codes), наприклад, VK_FI, VK_SHIFT,
VK_A, VK_B, VK_PLUS . Вони перечислені в документації до класу KeyEvent.
Фактичне значення віртуального коду залежить від мови і розкладки
клавіатури. Щоб взнати, яка клавіша була натиснута, треба порівняти результат
виконання методу getKeyCode() з цими константами. Якщо коду клавіші немає,
як відбувається під час настання події KEY_TYPED, то повертається значення
VK_UNDEFINED . Щоб взнати, чи не натиснута одна або декілька клавіш –
модифікаторів <Alt>, <Ctrl>, <Meta>, <Shift>, треба скористатися наслідуваним
від класу inputEvent методом getModifiers() і порівняти його результат з
константами ALT_MASK, CTRL_MASK, META_MASK, SHIFT_MASK.
Створення меню. В контейнер типу Frame закладена можливість
створення стандартного рядка меню (menu bar), розташованого нижче рядка
заголовку. Цей рядок –об’єкт класу MenuBar. Для цього потрібно створити
об’єкт класу MenuBar і звернутися до методу setMenuBar():
Frame f = new Frame("Приклад меню");
MenuBar mb = new MenuBar();
f.setMenuBar(mb);
Якщо ім’я mb не знадобиться, можна сумістити два останніх звернення до
58
59.
методів:f.setMenuBar(new MenuBar());
Зрозуміло, що рядок меню ще порожній, а пункти меню ще не створені.
Кожен елемент рядка меню – випадаюче меню (drop-down menu ) – це об’єкт
класу Menu. Створити ці об’єкти і занести їх в рядок меню не складніше, ніж
створити рядок меню:
Menu mFile = new Menu("Файл");
mb.add(mFile);
Menu mEdit = new Menu("Правка");
mb.add(mEdit);
Menu mView = new Menu("Вид");
mb.add(mView);
Menu mHelp = new Menu("Справка");
mb.setHelpMenu(mHelp);
Елементи розташовуються зліва направо в порядку звернення до методів
add(), як показано на рис. 2. В багатьох графічних системах прийнято меню
Справка (Help) «притискати» до правого краю рядка меню. Це досягається
зверненням до методу setHelpMenu(), але фактичне положення даного меню
визначається лише графічною оболонкою.
Рисунок 2 – Інтерфейс меню
Потім відбувається визначення кожного випадаючого меню, створюючи
його пункти. Кожен пункт меню – це
об’єкт класу MenuІtem. Схема його
створення і додавання до меню точно така ж, як і самого меню:
59
60.
MenuІtem create = new Menuitem("Створити");mFile.add(create);
MenuІtem open = new Menuitem("Відкрити...");
mFile.add(open);
Пункти меню будуть розташовані зверху вниз в порядку звернення до
методів add(). Часто пункти меню об’єднуються в групи. Одна група від іншої
відокремлюється горизонтальною рискою. На рис. 2 риска проведена між
командами
Відкрити
і
Відправити.
Ця
риска
створюється
методом
addSeparator() класу Menu або визначається як пункт меню з написом
спеціального виду – дефісом:
mFile.addfnew Menuitem(" -"));
Клас Menu розширює клас MenuІtem, а не навпаки.
Часто
команди
меню
створюються для вибору
із
них певних
можливостей, подібно компонентам Сheckbox. Такі пункти можна виділити
кліком кнопки миші або відмінити виділення повторним кліком. Ці команди –
об’єкти класу CheckboxMenuItem:
CheckboxMenuItem disk = new CheckboxMenuItem(
"Диск A:", true);
send.add(disk);
send.add(new CheckboxMenuItem("Архів"));
Деякі графічні оболонки, але не MS Windows, дозволяють створювати
відокремлювані (tearOff) меню, які можна переміщувати по екрану. Це
вказується в конструкторі:
Menu(String label, boolean tearOff)
Якщо tearOff==true і графічна оболочка вміє створювати відокремлюване
меню, то воно буде створене. В протилежному випадку цей аргумент просто
ігнорується.
Нарешті, потрібно призначити дії командам меню. Команди меню типу
MenuІtem породжують події типу ActionEvent , тому потрібно приєднати до
них об’єкт класу-слухача як до з вичайних компонентів, написавши:
create.addActionListener(new SomeActionEventHandler())
60
61.
open.addActionListener(new AnotherActionEventHandler())Пункти типу CheckboxMenuItem породжують події типу ItemEvent, тому
потрібно звертатися до об’єкту-слухача цієї події:
disk.addltemListener(new SomeltemEventHandler())
Часто дії, записані в командах меню, викликаються не тільки кліком
кнопки миші, а й «гарячими» клавішами ( shortcut), діючими найчастіше при
натисканні клавіші <Ctrl>.
На екрані в пунктах меню, яким призначені
«гарячі» клавіші, з’являються підказки типу Ctrl+N, Ctrl+O, як показано на
рис. 2.
«Гаряча» клавіша визначається об’єктом класу MenuShortcut і
вказується в його конструкторі константою класу KeyEvent, наприклад:
MenuShortcut keyCreate = new MenuShortcut(KeyEvent.VK_N);
Після цього «гарячою»
буде комбінація клавіш <Ctrl>+<N>. Потім
отриманий об’єкт вказується в конструкторі класу MenuІtem:
MenuItem create = new Menuitem("Створити", keyCreate);
Натискання <Ctrl>+<N> буде викликати вікно Створити. Ці дії,
зрозуміло, можна сумістити, наприклад:
Menuitem open = new Menultern("Відкрити…",
new MenuShortcut(KeyEvent.VK_O));
Можна додати також натискання клавіші <Shift>. Дія пункту меню буде
викликатися
натисканням
комбінації
скористатися
конструктором
клавіш
MenuShortcut(int
<Shift>+<Ctrl>+<X>,
key,
boolean
якщо
useShift)
з
аргументом useShift == true.
Порядок виконання роботи:
1. Запустіть NetBeans IDE 6.9.1.
2. У вікні, що відкрилось виберіть Файл\Создать проект.
Відкриється вікно створення нового проекту. В ньому виберіть категорію
проекту Java, а у вікні Проекты – Приложение Java та натисніть клавішу
Далее.
61
62.
3. Задайте ім’я Java -проекту та виберіть папку для його збереження.В полі Имя
Прізвище
проекта задайте назву за наступним зразком:
студента
латиницею5.
Наприклад:
MyIvanov6.
My +
В
полі
Расположение проекта виберіть диск, на якому розміщена Ваша робоча
директорія (для цього скористайтесь клавішею
Обзор…). Для збереження
введених змін натисніть на клавішу Завершить.
4. Створіть в Вашому проекті новий клас My+Прізвище студента
латиницею (наприклад, MyIvanov).
Для цього натисніть правою клавішею миші (ПКМ) на назві
пакету
myivanov6 та в меню, що відкрилось виберіть: Создать\Класс Java (рис. 3).
Рисунок 3 – Створення класу
В вікні, що відкриється введіть ім’я класу та для остаточного примінення
змін натисніть клавішу Завершить.
Перед Вами з’явиться вікно редагування файлу My Ivanov.Java.
5. Cтворіть віконний інтерфейс.
Для цього в створеному класі MyIvanov потрібно задати новий клас з
розширенням JFrame з вказанням повного шляху до Swing-бібліотек, де
знаходиться клас JFrame. Після цього необхідно написати параметризований
конструктор класу, для відображення вікна розміром 800х600 з стандартними
кнопками управління (Мінімізувати, Згорнути, Закрити) (рис. 4).
62
63.
Рисунок 4 – Параметризований конструктор класу6. Пропишіть посилання на створений клас MyIvanov в головному методі
main.
Для цього переходимо в клас Main, компонента Main.java та прописуємо
там наступний рядок (рис. 5):
Рисунок 5 – Посилання на створений клас MyIvanov
7. Згідно запропонованого
в додатку до лабораторної роботи лістингу
напишіть в класі MyIvanov програму для здійснення малювання мишкою в
віконному інтерфейсі (рис. 6).
Програмний продукт дозволяє малювати чотирма кольорами (червоним,
зеленим, синім та чорним), та містить опцію автоматичного очищення екрану.
Колір можна вибирати натисненням відповідної кнопки у вікні екрану чи з меню
Малювати\Колір.
Програма містить меню, що розгортається, підпункти якого запрограмовані
на натиснення комбінацій клавіш (Відкрити => Ctrl+0, Вихід =>Ctrl+Q тощо).
Необхідні матеріал по створенню елементів програмного продукту Ви
63
64.
можете знайти у теоретичних відомостях до лабораторної роботи.Рисунок 6 – Інтерфейс програмного продукту
8. Здійсніть
перевірку
працездатності
програми (при
необхідності
виправте помилки та доопрацюйте).
Лістинг коду MyIvanov.java поданий у додатку до лабораторної роботи.
9. Представте електронний варіант лабораторної роботи викладачеві для
звітності.
Вимоги до оформлення звіту:
1. Оформити звіт з зазначенням висновків та захистити роботу (знання
використаних у роботі елементів коду Java).
Література:
1. Нотон П. JAVA: Справ. руководство: Пер. с англ. / Под ред. А. Тихонова.
– М.:БИНОМ: Восточ. Кн. Компания, 1996: Восточ. Кн. Компания. –
447 с.
2. Программирование на Java / Вязовик Н.А. – М.: ИНТУИТ.РУ «Інтернетуниверситет Информационных Технологий», 2003. – 592 с.
3. Философия Java. Библиотека программиста. 4 -е изд. – СПб.: Питер, 2009.
– 640 с.
64
65.
Додаток до лабораторної роботи №6Лістинг коду документа MyIvanov.java
65
66.
6667.
Лабораторне заняття № 7Тема роботи: створення аплетів.
Мета роботи: ознайомитись з особливостями створення аплетів в мові
Java.
Теоретичні відомості:
Мова Java дозволяє створювати аплети (applets) – програми, що
працюють в середовищі браузера. Аплету не потрібне вікно верхнього рівня –
їм служить для цього вікно браузера. Вони не запускаються JVM – їх
завантажує браузер, котрий сам запускає JVM для виконання аплету. Ці
особливості відбиваються й на написанні програми аплета.
З точки зору мови Java, аплет – це розширення класу Applet, котрий, в
свою чергу, розширює клас Panel. Таким чином, аплет – це панель спеціального
виду або контейнер для розміщення компонентів з додатковими властивостями
і методами. Менеджером розміщення компонентів по замовчуванню, як і в
класі Panel, служить FlowLayout. Класс Applet знаходиться в пакеті java.applet,
в якому крім нього є тільки три інтерфейси, реалізовані в браузері.
68.
Оскільки JVM не запускає аплет, відпадає необхідність в методi main(),його немає в аплетах. В аплетах рідко зустрічається конструктор. Справа в
тому, що при першому ж запуску створюється його контекст. Під час
виконання конструктора контекст ще не сформований, тому не всі початкові
значення вдається визначити в конструкторі. Початкові дії, зазвичай виконувані
в конструкторі та методі main(), в аплеті записуються в метод init() класу Applet.
Цей метод автоматично запускається виконавчою системою Java браузера
відразу ж після завантаження аплета. Ось як він виглядає у вихідному коді
класу Applet:
public void init(){}
Метод init() не має аргументів, не повертає значення і повинен
перевизначатися в кожному аплеті – підкласі класу Applet. Зворотні дії –
завершення роботи, звільнення ресурсів – записуються при необхідності в
метод destroy(), також виконуваний автоматично при вивантаженні аплету.
Крім методів init() і destroy() в класі Applet присутні ще два порожніх
методи, які виконуються автоматично. Браузер повинен звертатися до методу
start() при кожній появі аплету на екрані і звертатися до методу stop(), коли
аплет зникає з eкрану монітора. В методі stop() можна визначити дії, зупиняючі
роботу аплета, в методі start()– відновлюючі її.
Роботу вказаних методів можна пояснити простим прикладом. Приїхавши
весною на дачу, Ви прокладаєте водопровідні труби, прикручуєте крани,
протягуєте шланги – виконуєте метод init() для своєї зрошувальної системи.
Після цього, приходячи на ділянку, включаєте крани – запускаєте метод start(),
а виходячи, виключаєте їх – виконуєте метод stop(). Нарешті, восени Ви
розбираєте зрошувальну систему, відкручуєте крани, просушуєте і складуєте
водопровідні труби – виконуєте метод destroy().
Перераховані
вище
методи
init(),
start(),
stop(),
destroy()
не
є
обов’язковими при написанні простих аплетів, які не займають багато пам’яті,
як свідчить наступний приклад, який показує дію простенького аплету,
виконуючого програму HelloWorld:
68
69.
import java.awt.*;import java.applet.*;
public class HelloWorld extends Applet{
public void paint(Graphics g){
g.drawstring("Hello, XXI century World!", 10, 30);
} }
Компілятор створює файл HelloWorld.class, але скористатися для його
виконання інтерпретатором java тепер не можливо, оскільки немає методу
main(). Замість інтерпретації потрібно дати вказівку браузеру для запуску
аплету. Всі вказівки браузеру даються помітками, тегами (tags), на мові HTML.
Зокрема, вказівка на запуск аплета дається в тезі <applet>. В ньому обов’язково
задається ім’я файлу з класом аплета параметром code, ширина width і висота
height панелі аплета в пікселях. Повністю текст HTML для нашого аплета
приведений в наступному лістинзі:
<html>
<head><title> Applet</title></head> <body>
<br>
<applet code = "HeІІoWorld.class" width = "200" height
= "100">
</applet>
</body>
</html>
Цей текст заноситься в файл з розширенням html або htm, наприклад
HelloWorld.html. Ім’я файлу довільне, ніяк не зв’язане з аплетом або класом
аплета. Обидва файли – HelloWorld.html і HelloWorld.class – поміщаються в
один каталог на сервері, і файл HelloWorld.html завантажується в браузер. В
свою чергу, браузер, проглядаючи HTML-файл, виконає тег <applet> і
завантажить аплет. Після завантаження аплет з’явиться у вікні браузера.
Параметри тега <applet>:
Обов’язкові параметри:
code – URL-адреса файлу з класом аплета або архівного файлу;
width і height – ширина і висота аплета в пікселях.
Необов’язкові параметри:
codebase – URL-адреса каталогу, в якому розташований файл класу
аплета. Якщо цей параметр відсутній, браузер буде шукати файл в тому ж
69
70.
каталозі, де розміщений відповідний HTML-файл;archive – файли всіх класів, складаючих аплет, можуть бути упаковані
архіватором ZIP або спеціальним архіватором JAR в один або декілька
архівних файлів. Зазначений параметр задає URL-адреси цих файлів через
кому;
align – вирівнювання аплета у вікні браузера. Цей параметр має одне із
наступних значень: ABSBOTTOM, ABSMIDDLE, BASELINE, BOTTOM,
CENTER, LEFT, MIDDLE, RIGHT, TEXTTOP, TOP;
hspace і vspace – горизонтальні і вертикальні поля, відокремлюючі аплет
від інших об’єктів у вікні браузера в пікселях;
download – задає порядок завантаження зображень аплетом. Імена
зображень перечислюються через кому в порядку завантаження;
name – ім’я аплета. Параметр потрібний, якщо завантажуються декілька
аплетів з однаковими значеннями code і codebase;
style – інформація про стиль CSS;
title – текст, відображуваний в процесі виконання аплета;
alt – текст, що виводиться замість аплета, якщо браузер не може
завантажити його;
mayscript – не має значення. Це слово вказує на те, що аплет буде
звертатися до тексту JavaScript.
Між тегами <applet> і </applet> можна написати текст, який буде
виведений, якщо браузер не зможе зрозуміти тег <applet>. Ось повний приклад:
<applet name = "AnApplet" code = "AnApplet.class"
archive = "anapplet.zip, myclasses.zip"
codebase = "http://www.some.com/public/applets"
width = "300" height = "200" align = "TOP"
vspace = "5" hspace = "5" mayscript
alt = "If you have a Java-enabled browser, you would
see an applet here.">
<hr>If your browser recognized the applet tag, you
would see an applet here.<hr>
</applet>
Обов’язково упаковуйте всі класи аплета в zip- чи rаr-архіви і вказуйте їх
в параметрі archive в HTML-файлі. Це значно прискорить завантаження аплета.
70
71.
Слід ще сказати, що, починаючи з версії HTML 4.0, є тег <object>, призначенийдля завантаження і аплетів, і інших об’єктів, наприклад, ActiveX. Крім того,
деякі браузери можуть використовувати для завантаження аплетів тег <embed>.
При завантаженні аплета браузер створює контекст, в якому збирає всі дані,
необхідні для виконання аплета. Деякі дані із контексту можна передати в
аплет.
Дані про оточення аплета. Метод getCodeBase() повертає URL-адресу
каталогу, в якому лежить файл класу аплета.
Метод getDocumentBase() повертає URL-адресу каталогу, в якому лежить
HTML-файл, викликавший аплет. Браузер реалізує інтерфейс AppletСontext, що
знаходиться в пакеті java.applet. Аплет може отримати посилання на цей
інтерфейс методом getAppletContext(). За допомогою методів getApplet (String
name) і getApplets() інтерфейсу AppletСontext можна отримати посилання на
вказаний аргументом name аплет або на всі аплети, завантажені в браузер.
Метод showDocument(URL address) завантажує в браузер HTML-файл з
адресою address.
Метод showDocument (URL address, String target) завантажує файл у
фрейм, указаний другим аргументом target. Цей аргумент може приймати
наступні значення:
_seif – те ж вікно і той же фрейм, в якому працює аплет;
_parent – батьківський фрейм аплета;
_top – фрейм верхнього рівня вікна аплета;
_blank – нове вікно верхнього рівня;
name – фрейм або вікно з іменем name, якщо воно не існує, то буде
створене.
Захист від аплета. Браузер може взагалі відмовитися від завантаження
аплетів. В Netscape Communicator це робиться за допомогою прапорця Enable
Java у вікні, викликаному командою Edit | Preferences | Advanced, в Internet
Explorer – у вікні після вибору команди Tools | Internet Options | Security. Якщо
ж браузер завантажує аплет, то створює йому обмеження, так звану
71
72.
«пісочницю» (sandbox), в яку попадає аплет, але вийти з якої не може. Коженбраузер створює свої обмеження.
Браузери можуть посилити або ослабити ці обмеження, наприклад,
дозволити локальним аплетам, завантаженим з тієї ж машини, де вони
виконуються,
доступ
до
файлової
системи.
Найменшим
обмеженням
підлягають довірені (trusted) аплети, що мають електронний підпис за
допомогою класів із пакетів java.security.*.
При створені додатку, що завантажує аплети, необхідно забезпечити
засоби перевірки аплету і задати обмеження. Їх дає в розпорядження клас
securityManager. Кожен браузер розширяє клас SecurityManager по-своєму,
встановлюючи ті чи інші обмеження. Єдиний екземпляр цього класу
створюється при запуску JVM в браузері і не може бути змінений.
Використовувані в роботі класи та методи:
Клас Button. В даному класі визначено два конструктори, перший з яких
дозволяє створювати кнопку без напису, а другий – кнопку з написом. Зазвичай
використовується другий конструктор:
public Button();
public Button(String label);
addNotify – використовується для виклику методу createButton: public void
addNotify().
getLabel () – метод, що використовується для отримання напису на
кнопці: public String getLabel().
paramString () – метод, що використовується для отримання рядка
параметрів, що показує стан кнопки: protected String paramString().
setLabel () – метод, що використовується для установки напису на кнопці:
public void setLabel(String label).
З методів класу Button найчастіше використовуються два – getLabel і
setLabel. Перший з них дозволяє отримати рядок напису на кнопці, а другий –
встановити новий напис.
Клас Checkbox. Перемикачі з незалежною і залежною фіксацією
створюються на базі класу Checkbox. Розглянемо прототипи конструкторів і
72
73.
методів цього класу:Конструктори:
public Checkbox(); – створення перемикача з незалежною фіксацією без
назви;
public Checkbox(String label); – створення перемикача з незалежною
фіксацією і назвою;
public Checkbox(String label CheckboxGroup group, boolean state); –
створення перемикача із залежною фіксацією і назвою.
Методи:
addNotify – виклик методу createCheckbox: public void addNotify();
getCheckboxGroup – отримання групи, до якої відноситься даний
перемикач
із
залежною
фіксацією:
public
CheckboxGroup
getCheckboxGroup();
getLabel – отримання назви перемикача: public String getLabel();
getState – визначення поточного стану перемикача: public boolean
getState();
paramString – отримання рядка параметрів: protected String paramString();
setCheckboxGroup – встановлення групи, до якої відноситься даний
перемикач із залежною фіксацією: public void setCheckboxGroup
(CheckboxGroup g);
setLabel – встановлення назви перемикача: public void setLabel(String
label);
setState
–
встановлення
нового
стану
перемикача:
public
void
setState(boolean state);
Для кожної групи перемикачів із залежною фіксацією Ви повинні
створити об'єкт класу CheckboxGroup: public CheckboxGroup();.
Методи класу:
public Checkbox getCurrent(); – отримання посилання на перемикач, який
знаходиться у ввімкненому стані;
public void setCurrent(Checkbox box);
73
– встановлення вказаного
74.
перемикача в групі у включений стан;public String toString(); – отримання рядка, який представляє групу.
Клас Choice. На базі класу Choice Ви можете створити списки типу Drop
Down або, як їх ще називають, «випадні» списки. Такий список виглядає як
текстове поле заввишки в один рядок, праворуч від якого розташовується
кнопка. Наведемо опис прототипів конструктора і методів класу Choice:
Конструктор: public Choice();
Методи:
addItem – додавання елементу в список: public void addItem(String item);
addNotify – виклик методу createChoice: public void addNotify();
countItems – визначення кількості елементів в списку: public int
countItems();
getItem – отримання рядка списку по номеру відповідного йому елементу
списку: public String getItem(int index);
getSelectedIndex – отримання номеру поточного вибраного елементу:
public int getSelectedIndex();
getSelectedItem – отримання рядка, відповідного поточному вибраному
елементу списку: public String getSelectedItem();
paramString – отримання рядка параметрів: protected String paramString();
select – вибір в списку елементу по заданому номеру: public void select(int
pos);
select – вибір в списку елементу по заданому рядку: public void
select(String str);
Конструктор класу Choice не має параметрів. Створення списку з його
допомогою здійснюється наступним чином:
Choice chBackgroundColor;
chBackgroundColor = new Choice();
Для наповнення списку використовуйте метод addItem. Як параметр йому
необхідно передати текстовий рядок, який буде пов'язаний з елементом списку,
що додається:
chBackgroundColor.addItem("Yellow");
74
75.
Далі список можна додати у вікно аплета як компонент за допомогоюметоду add:
add(chBackgroundColor);
Відмітимо, що список можна заповнювати до або після додавання у вікно
аплета. Після наповнення списку за замовчуванням виділяється елемент, який
був доданий в список першим. За допомогою методу select можна виділити
будь-який елемент списку по його номеру або рядку, пов'язаному з елементом.
Коли користувач вибирає новий рядок в списку, виникає подія. Обробник
цієї події, реалізований, наприклад, перевизначенням методу action, може
отримати номер вибраного рядка за допомогою методу getSelectedIndex.
Якщо вас цікавить не номер вибраного елементу, а рядок, пов'язаний з
вибраним елементом, скористайтеся методом getSelectedItem. За допомогою
методу getItem можна отримати текст рядка, пов'язаного з елементом, по
номеру елементу.
При створенні текстового поля TextField можна вибрати один з чотирьох
конструкторів, відповідно, для створення поля без тексту і без вказівки розміру,
без тексту заданого розміру, для створення поля з текстом і для створення поля
з текстом вказаного розміру.
Фрагмент коду, в якому створюється поле з текстом, що має ширину,
достатню для розміщення 35 символів:
TextField txt;
txt = new TextField(
"Введіть рядок тексту", 35);
Створене поле додається у вікно аплета методом add. Більшість
найкорисніших методів, необхідних для роботи з полем класу TextField,
визначена в класі TextComponent:
Методи класу:
getSelectedText – отримання тексту, виділеного користувачем у вікні
поля: public String getSelectedText();
getSelectionEnd – отримання позиції кінця виділеної області: public int
75
76.
getSelectionEnd();getSelectionStart – отримання позиції початку виділеної області: public int
getSelectionStart();
getText – отримання повного тексту з поля: public String getText();
isEditable – перевірка, чи можливе редагування тексту в полі: public
boolean isEditable();
paramString – отримання рядка параметрів: protected String paramString();
removeNotify – видалення повідомлення: public void removeNotify();
select – виділення заданій області тексту: public void select(int selStart int
selEnd);
selectAll – виділення всього тексту: public void selectAll();
setEditable – включення або виключення можливості редагування тексту:
public void setEditable(boolean t);
Для запису тексту в полі застосування можна скористатися методом
setText.
Якщо
потрібно
поле
для
введення
багаторядкової
інформації
використовується клас TextArea. З його допомогою можна створити
багаторядкове поле заданої ширини і висоти, забезпечивши його смугами
перегляду.
Конструктори:
public TextArea(); – створення поля без тексту і без вказування його
розмірів;
public TextArea(int rows, int cols); – створення поля без тексту з
вказанням розмірів;
public TextArea(String text); – створення поля з текстом без
вказування розмірів;
public TextArea(String text int rows, int cols); – створення поля з
текстом і з вказування розмірів.
Методи:
addNotify – виклик методу createTextArea: public void addNotify();
76
77.
append – додавання тексту в поле редагування: public void append(Stringstr);
appendText – додавання тексту в поле редагування: public void
appendText(String str);
getColumns – визначення кількості стовпців поля: public int getColumns();
getRows – визначення кількості рядків поля: public int getRows();
insertText – додавання тексту в поле редагування починаючи із заданої
позиції: public void insertText(String str, int pos);
minimumSize – визначення мінімальних розмірів області для розміщення
багаторядкового текстового поля: public Dimension minimumSize();
paramString – отримання параметрів рядка: protected String paramString();
preferredSize – визначення переважних розмірів області для розміщення
багаторядкового текстового поля: public Dimension preferredSize();
replaceText – заміщення блоку тексту, починаючи з першої позиції і до
другої позиції: public void replaceText(String str int start, int end);
При створенні багаторядкового текстового поля редагування, можна
використовувати конструктор, що допускає вказання розмірів поля в рядках і
стовпцях: TextArea txt; txt = new TextArea("Введіть рядок тексту" 5, 35);
Створене поле додається у вікно аплету методом add.
Порядок виконання роботи:
1. Запустіть NetBeans IDE 6.9.1.
2. У вікні, що відкрилось виберіть Файл\Создать проект.
3. Відкриється вікно створення нового проекту. В ньому виберіть категорію
проекту Java, а у вікні Проекты – Приложение Java та натисніть
клавішу Далее.
4. Задайте ім’я Java-проекту та виберіть папку для його збереження.
5. В полі Имя проекта задайте назву за наступним зразком: My +
Прізвище студента латиницею7. Наприклад: MyIvanov7.
6. В полі Расположение проекта виберіть диск, на якому розміщена Ваша
77
78.
робоча директорія (для цього скористайтесь клавішею Обзор…).7. Для збереження введених змін натисніть на клавішу Завершить.
8. Створіть в Вашому проекті аплет з назвою FirstAplet.
Для цього натисніть правою клавішею миші (ПКМ) на назві проекту
MyIvanov7 та в меню, що відкрилось виберіть: Создать\Аплет (рис. 1).
Рисунок 1 – Створення класу аплета
9. В вікні створення аплету, що відкриється (рис. 2) введіть ім’я класу (до
якого ми пізніше будемо звертатись для виклику аплета), та для
остаточного примінення змін натисніть клавішу Завершить.
Рисунок 2 – Задання імені аплета
78
79.
10. Перед Вами з’явиться вікно редагування файлу FirstAplet.Java (рис. 3).Рисунок 3 – Вікно редагування файлу FirstAplet.Java
11. Здійсніть в даному файлі наступні зміни (рис. 4).
Рисунок 4 – Код тіла аплету
Для вікна аплету створюється об’єкт класу Graphics, посилання на який
передається методу paint. Для кращого розуміння, можна уявити собі контекст
відображення як полотно, на якому малює художник. Так само як художник
може вибирати для малювання різні інструменти, програміст, що створює аплет
Java, може вибирати різні методи класу Graphics і задавати різні атрибути
79
80.
контекстувідображення.
В
нашому
випадку
використовується
метод
drawString(), який використовується для малювання на графічному контенті
текстової стрічки з вказанням конкретних координат х та у початку написання
тексту.
12. Здійсніть побудову проекту (Выполнить\ Построить главный проект)
та запустіть створений Вами проект (Выполнить\ Запустить главный
проект).
Якщо Ви все правильно зробили, то проект запуститься, однак
результатів створеної роботи візуально не буде помітно. Для того щоб побачити
те, що Ви створили, потрібно прописати посилання на скомпільований файл
FirstAplet.class, що знаходиться в папці: Назва диска:\MyIvanov7\build\classes.
13. Створіть в папці, де знаходиться клас FirstAplet.class
html-файл
(FirstAplet.html), в який помістіть посилання на клас аплету (рис. 5).
Для цього використовується Блокнот. Створюєте текстовий документ
FirstAplet.txt з інформацією, вказаною на малюнку, а потім перезберігаєте його
у форматі .html (отримаєте документ FirstAplet.html).
Рисунок 5 – Код виклику атлета
14. Перевірте працездатність аплету.
Для цього запустіть створений Вами файл FirstAplet.html (нагадую, він
знаходиться в папці Назва диска:\MyIvanov7\build\classes). Перед Вами
з’явиться вікно браузера з наступними даними (рис. 6):
80
81.
Рисунок 6 – Результат виконання аплету15. Використовуючи менеджер компонування створіть аплет «Сітка цифр».
Для цього, аналогічно створенню попереднього аплету, натисніть правою
клавішею миші (ПКМ) на назві проекту MyIvanov7 та в меню, що відкрилось
виберіть: Создать\Аплет (див. рис. 1). В вікні створення аплету, що
відкриється введіть ім’я класу Zyfry та для остаточного примінення змін
натисніть клавішу Завершить. Перед Вами з’явиться вікно редагування файлу
Zyfry.Java.
16. Змініть створений файл класу таким чином, як показано на рис. 7.
Рисунок 7 – Код файлу Zyfry.Java
81
82.
Клас GridLayout розміщує компоненти в простій рівномірній сітці.Конструктор цього класу дозволяє задавати кількість рядків і стовпців. В аплеті
«Сітка цифр» GridLayout використовується для створення сітки 4х4, 15
квадратів з 16 заповнюються кнопками, поміченими відповідними індексами.
17. Створіть в папці, де знаходиться клас html-файл (Zyfry.html), в який
помістіть посилання на створений Вами клас аплету (рис. 8).
Для цього створіть текстовий документ Zyfry.txt з інформацією, вказаною
на малюнку, а потім перезбережіть його у форматі .html (отримаєте документ
Zyfry.html).
Рисунок 8 – Код файлу Zyfry.html
18. Перевірте працездатність аплету.
Для цього запустіть створений Вами файл Zyfry.html (він знаходиться в
папці Назва диска:\MyIvanov7\build\classes). У вікні браузера Ви отримаєте
наступне (рис. 9):
Рисунок 9 – Інтерфейс аплету «Сітка цифр»
82
83.
19. Створіть аплет FormLayout.java, який здійснює обробку даних простудентів на рахунок здачі ними лабораторних робіт з подальшою
обробкою даних та виведенням результатів обробки.
Загальний вигляд аплету показаний на рис. 10.
Рисунок 10 – Інтерфейс аплету «FormLayout»
20. Для
виведення
результатів
роботи
аплету
створіть
FormLayout.html з введеними даними, які представлені на рис. 11.
Рисунок 11 – Код файлу FormLayout.html
У головному класі аплета визначено декілька полів:
83
файл
84.
Поле btReady зберігає посилання на кнопку з написом Ready: ButtonbtReady;
У полях chbox1 і chbox2 записані посилання на перемикачі з незалежною
фіксацією, які використовуються для активізації однорядкових текстових полів:
Checkbox chbox1;
Checkbox chbox2;
Поле grRadio зберігає посилання на групу перемикачів із залежною
фіксацією: Лабораторна робота 1, Лабораторна робота 2 і Лабораторна
робота 3:
CheckboxGroup grRadio;
Посилання на ці перемикачі знаходяться в наступних трьох полях:
Checkbox rd1;
Checkbox rd2;
Checkbox rd3;
У полі ch1 зберігається посилання на список, призначений для вибору
кольору: Choice ch1;
Зліва від однорядкових полів редагування в нашому вікні є підписи,
реалізовані як об'єкти класу Label. Посилання на ці об'єкти знаходяться в полях
lbFirstName і lbSecondName:
Label lbFirstName;
Label lbSecondName;
Посилання на однорядкові поля редагування записані в поля з іменами
txtFirstName і txtSecondName:
TextField txtFirstName;
TextField txtSecondName;
І, нарешті, посилання на багаторядкове текстове поле зберігається в полі з
ім'ям txta: TextArea txta;
Метод init займається створенням компонент і додаванням їх у вікно
алпета. Крім того, цей метод змінює колір фону вікна аплета і вікон тих, що
додаються компонент. В методі init здійснено налаштування системи Layout
Manager, встановивши режим GridLayout:
public void init()
{
84
85.
setLayout(new GridLayout(4, 3));. . .
}
Тут для розміщення компонентів в вікні аплету створюється таблиця з
чотирьох стрічок і трьох стовбців.
Перш за все метод init створює два перемикачі з незалежною фіксацією,
два об'єкти класу Label і два однорядкові поля редагування тексту:
chbox1 = new Checkbox("П.І.Б ПЕРШОГО СТУДЕНТА");
add(chbox1);
lbFirstName = new Label(
"ВВЕДІТЬ ДАНІ ПРО ПЕРШОГО СТУДЕНТА:");
add(lbFirstName);
txtFirstName = new TextField(" ", 30);
add(txtFirstName);
chbox2 = new Checkbox("П.І.Б ДРУГОГО СТУДЕНТА");
add(chbox2);
lbSecondName = new Label(
"ВВЕДІТЬ ДАНІ ПРО ДРУГОГО СТУДЕНТА:");
add(lbSecondName);
txtSecondName = new TextField(" ", 30);
add(txtSecondName);
Поля створюються за допомогою конструкторів, а додаються у вікно
аплета методом add. Згідно схеми розташування компонент, установленой за
замовчуванням, компоненти, що додаються, розміщуються зверху вниз і зліва
направо.
Для групи перемикачів із залежною фіксацією ми створюємо об'єкт класу
CheckboxGroup:
grRadio = new CheckboxGroup();
Посилання на цей об'єкт потім передається як другий параметр
конструкторам, що створюють перемикачі:
rd1 = new Checkbox("ЛАБОРАТОРНА РОБОТА 1",
grRadio, true);
rd2 = new Checkbox("ЛАБОРАТОРНА РОБОТА 2",
grRadio, false);
rd3 = new Checkbox("ЛАБОРАТОРНА РОБОТА 3",
grRadio, false);
Перемикачі додаються у вікно аплета за допомогою методу add:
add(rd1);
add(rd2);
add(rd3);
85
86.
Список кольорів створюється як об'єкт класу Choice:ch1 = new Choice();
Після створення списку додаємо в нього три елементи, викликаючи для
цього метод addItem:
ch1.addItem("White");
ch1.addItem("Green");
ch1.addItem("Blue");
Услід за цим додаємо сформований список у вікно аплета: add(ch1);
Для встановлення кольору фону ми викликаємо метод setBackground без
вказівки об'єкту:
setBackground(Color.yellow);
В цьому випадку метод викликається для поточного об'єкту, тобто для
нашого аплета. Щоб встановити колір фону у вікнах компонент, викликаємо
метод setBackground для відповідних об'єктів, як це показано нижче:
setBackground(Color.yellow);
lbFirstName.setBackground(
Color.yellow);
lbSecondName.setBackground(
Color.yellow);
rd1.setBackground(Color.yellow);
rd2.setBackground(Color.yellow);
rd3.setBackground(Color.yellow);
chbox1.setBackground(Color.yellow);
chbox2.setBackground(Color.yellow);
Багаторядкове текстове поле створюється як об'єкт класу TextArea. У
ньому 6 рядків і 45 стовпців:
txta = new TextArea("", 6, 45);
add(txta);
Первинний колір фону багаторядкового текстового поля встановлюється
тим же способом, що використовували для інших компонент:
txta.setBackground(Color.white);
Цей колір надалі змінюватиметься обробником подій, створюваних
списком кольорів.
І, нарешті, останнє що робить метод init перш ніж повернути управління, створює кнопку з написом Ready і додає її у вікно аплета:
btReady = new Button("ОБРОБИТИ ДАНІ");
86
87.
add(btReady);У методі action ми визначили робочі поля btn, str1 і str2:
Button btn;
String str1, str2;
На початку своєї роботи метод action визначає, який компонент викликав
подію. Для цього аналізується поле evt.target:
if(evt.target instanceof Button)
{
. . .
return true;
}
else if(evt.target instanceof Choice)
{
. . .
return true;
}
return false;
Метод action обробляє події, що викликаються об'єктами класів Button і
Choice. Якщо подія викликана компонентом, що відноситься до якого-небудь
іншому класу, метод повертає значення false. Цим він сигналізує, що обробка
події не виконувалася.
У разі успішної обробки події метод action повертає значення true.
Якщо подія викликана кнопкою, метод action перевіряє, якою саме.
Обробка виконується тільки в тому випадку, якщо через поле evt.target
передається посилання на кнопку btReady:
if(evt.target.equals(btReady))
{
. . .
}
else
{
return false;}
return true;
В іншому випадку, метод action повертає значення false, відмовляючись від
обробки події.
Що робить обробник події, що створюється кнопкою? Перш за все, він
зберігає посилання на кнопку в робочій змінній (просто для того, щоб показати,
як це робиться): btn = (Button)evt.target;.
87
88.
Далі наш обробник події витягує текстові рядки з однорядкових текстовихполів, викликаючи для цього метод getText. Ці рядки записуються в робочі
змінні str1 і str2:
str1 = txtFirstName.getText();
str2 = txtSecondName.getText();
Потім метод action перевіряє стан перемикачів з незалежною фіксацією
chbox1 і chbox2. Якщо вони ввімкнені, вміст відповідних тимчасових змінних
додається в багаторядкове текстове поле txta:
if(chbox1.getState())
txta.append(str1);
if(chbox2.getState())
txta.append(str2);
Для їх додавання ми викликаємо метод append. Аналогічним чином
превіряється стан перемикачів із залежною фіксацією:
if(rd1.getState())
txta.append("\nЛАБОРАТОРНА РОБОТА 1\n");
if(rd2.getState())
txta.append("\nЛАБОРАТОРНА РОБОТА 2\n");
if(rd3.getState())
txta.append("\nЛАБОРАТОРНА РОБОТА 3\n");
Якщо подія викликана списоком кольорів ch1, то метод action визначає,
який рядок списку став виділеним і встановлює в багаторядковому полі
редагування відповідний колір фону. Для визначення виділеного рядка
застосовується метод getSelectedIndex:
if(evt.target.equals(ch1))
{
if(ch1.getSelectedIndex() == 0)
txta.setBackground(Color.white);
if(ch1.getSelectedIndex() == 1)
txta.setBackground(Color.green);
if(ch1.getSelectedIndex() == 2)
txta.setBackground(Color.blue);
}
21. Представте електронний варіант лабораторної роботи з трьома аплетами
викладачеві для звітності.
Вимоги до оформлення звіту:
1. Оформити звіт з зазначенням висновків та захистити роботу (знання
88
89.
використаних у роботі елементів коду Java).Література:
1. Нотон П. JAVA: Справ. руководство: Пер. с англ. / Под ред. А. Тихонова.
– М.:БИНОМ: Восточ. Кн. Компания,1996: Восточ. Кн. Компания. – 447с.
2. Программирование на Java / Вязовик Н.А. – М.: ИНТУИТ.РУ «Интернетуниверситет Информационных Технологий», 2003. – 592 с.
3. Хабибуллин И.Ш. Самоучитель Java 2. СПб.: БХВ-Петербург, 2007. –
720 с.: ил.
Лабораторне заняття № 8
Тема роботи: робота з базами даних за допомогою JDBC.
Мета роботи: ознайомитись з JDBC, типами драйверів, навчитись
створювати бази даних.
Теоретичні відомості:
JDBC (Java DataBase Connectivity) – це інтерфейс для організації доступу
Java-додатків до баз даних JDBC не містить ніяких інструментів для візуальної
розробки баз даних.
Всі JDBC-драйвери можна розділити на наступні типи:
Драйвер типу 1 транслює JDBC в ODBC і для взаємодії з базою даних
покладається на драйвер ODBC. Компанія Sun включила до складу JDK
один такий драйвер – міст JDBC/ODBC. Однак, для його використання
потрібно відповідним чином встановити і конфігурувати ODBC-драйвер.
У першому випуску JDBC цей міст передбачалося використовувати
тільки для тестування, а не для робочого застосування. В даний час вже є
велика кількість більш вдалих драйверів.
Драйвер типу 2 створюється переважно мовою Java і частково на власній
мові програмування, яка використовується для взаємодії з клієнтським
API-інтерфейсом бази даних. Для використання такого драйвера потрібно
крім бібліотеки Java встановити специфічний для даної платформи
інтерфейс.
89
90.
Драйвер типу 3 створюється тільки на основі бібліотеки Java, в якійвикористовуєся незалежний від бази даних протокол взаємодії сервера і
бази даних. Цей протокол дозволяє транслювати запити бази даних в
специфічні запити бази даних. Клієнтська бібліотека не залежить від бази
даних, що спрощує її встановлення.
Драйвер типу 4 створюється тільки на основі бібліотеки Java, яка
транслює JDBC-запити безпосередньо в специфічний протокол бази
даних.
JDBC можна використовувати в додатках і аплетах. В аплеті, у таких
випадках застосовуються звичайні обмеження безпеки. За замовчуванням
менеджер забезпечення безпеки не довіряє аплетам, створеним на мові
програмування Java.
Зокрема, аплети, які використовують JDBC, здатні відкривати з'єднання з
базою даних на сервері, з якого вони копіюються. Це означає, що Web-сервер і
сервер бази даних повинні перебувати на одному комп'ютері, що не завжди має
місце.
SQL (англ. Structured query language – мова структурованих запитів) –
декларативна мова програмування для взаємодії користувача з базами даних,
що застосовується для формування запитів, оновлення і керування реляційними
БД, створення схеми бази даних і її модифікації, система контролю за доступом
до бази даних. SQL може формувати інтерактивні запити або, будучи
вбудованою в прикладні програми, виступати в якості інструкцій для керування
даними. Стандарт SQL, крім того, вміщує функції для визначення зміни,
перевірки і захисту даних.
Виконується SQL-команда за допомогою методів executeXXX(). За
допомогою методу executeUpdate() можна виконувати команди типу update,
insert, delete, create table, drop table. Для виконання команди select потрібно
використовувати метод executeQuery(). Існує також універсальний метод
execute(), який може застосовуватися для виконання довільних SQL-команд, але
він використовується в основному для інтерактивного створення запитів, а
90
91.
також якщо результатів виконання запитів може бути декілька. МетодexecuteQuery() повертає об'єкт ResultSet, який можна використовувати для
порядкового перегляду результатів.
Порядок виконання роботи:
1. Завантажте середовище NetBeans IDE та створіть новий проект (рис. 1).
Рисунок 1 – Створення нового Java додатку
2. Для того, щоб драйвер для роботи з базою даних запрацював, його
потрібно завантажити.
Створіть клас CreatingConnection (рис. 2).
Рисунок 2 – Створення класу
Зверніть увагу, що назва створеного класу, повинна бути такою ж як і
назва головного класу (рис. 3).
91
92.
Рисунок 3 – Клас CreatingConnection3. Пропишіть в створеному класі наступний код:
package ru.javatalks.faq.db;
/**
* 3.03.2012 16:08:32
*
* @author user
*/
public class CreatingConnection {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver loading
success!");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}}
Class.forName() служить для завантаження класу через його ім’я. Даний
метод викликає виключення, якщо потрібного класу не знайдено.
Завантажувати драйвер слід лише один раз протягом роботи програми,
але до того, як буде створюватися з'єднання з БД.
4. Запустіть приклад. Якщо з'явилося повідомлення «Driver loading
success!», значить все пройшло успішно. Якщо ж на екрані з'явилося
java.lang.ClassNot FoundException, перевірте чи правильно Ви прописали назву
класу, якщо і це не допоможе, тоді Ви невірно підключили або непідключили
зовсім драйвер. Перевірте вірність завантаженного Вами програмного
забезпечення, щодо розробки підключення.
5. Натисніть Запустить главный проект (F6). При правильному введені
92
93.
коду, маємо отримати успішну побудову, як показано на рис. 4.Рисунок 4 – Успішне з’єднання з базою даних
6. Пропишіть код під’єднання до бази даних з заданням користувача з
відповідним логіком та паролем, а також виведенням повідомлень, коли
користувач правильно під’єднався та у випадку, коли з’єднання з базою даних
не відбулось:
package base;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 3.03.2012 16:08:32
*
* @author user
*/
public class CreatingConnection {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver loading
success!");
//у MySQL обов’язково є системна база,
//до неї і будемо створювати підключення.
String url = "jdbc:mysql://localhost/mysql";
String name = "root";
93
94.
String password = "";try {
Connection con =
DriverManager.getConnection(url, name, password);
System.out.println("Connected.");
con.close();
System.out.println("Disconnected.");
} catch (SQLException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} } }
Перш, ніж запустити програму, варто зауважити, що з'єднання тут
створюється в рядку con = DriverManager.getConnection (url, name, password).
Клас DriverManager відповідає за драйвери. В даному випадку ми викликали
статичний метод getConnection(). Цей метод переглядає список драйверів і,
якщо знаходить відповідний до зазначеного URL, то створює і повертає
з'єднання. В іншому випадку викидає повідомлення з текстом: "No suitable
driver found". В якості аргументів даний метод приймає URL до бази, ім'я та
пароль користувача. За замовчуванням для MySQL ім'я – root, пароль –
порожній рядок.
URL до бази даних складається з протоколу: підпротоколу://інших версій.
Також може знадобитися встановити додаткові параметри, наприклад,
мережевим драйверам потрібен номер порту, а драйверам ODBC можуть
знадобитися різні атрибути. В загальному, у JDBC використовується синтаксис
опису джерела даних, подібний звичайним URL.
Протокол jdbc вказує, що в даному випадку ми використовуємо
інтерфейс JDBC. Підпротокол залежить від обраного нами сервера БД,
необхідний для визначення JDBC драйвера. Інші версії – формат подання
залежить від використовуваного протоколу, в даному випадку це адреса бази
даних, тому що вона знаходиться на нашому комп'ютері в host ми вказуємо
адресу – localhost або 127.0.0.1, і назву бази - mysql.
7. Запустіть програму на виконання.
94
95.
Натисніть «Построить главный проект».
Рисунок 5 – Вікно побудови проекту
Якщо на екран монітора вивело надписи:
Driver loading success!
Connected.
Disconnected.
то, це означає, що Ви успішно з'єдналися і розірвали з'єднання з базою даних. В
іншому випадку перевірте URL до БД
8. На даному кроці створимо базу даних для збереження книг.
Назвемо її bookstore. Cтворимо відповідний клас (рис. 6).
Рисунок 6 – Створення класу CreatingDataBase
95
96.
9. Пропишіть в створеному класі наступний код:package ru.javatalks.faq.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class CreatingDatabase {
//так ми створюємо базу даних:
private final static String createDatabaseQyery =
"CREATE DATABASE bookstore CHARACTER SET utf8
COLLATE utf8_general_ci";
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
try {
//завантажуємо драйвер
Class.forName("com.mysql.jdbc.Driver");
//Потрібно створити підключення до БД. В MySQL
обов’язково є
системна база,
//до неї і будемо створювати з’єднання.
String url = "jdbc:mysql://localhost/mysql";
//По замовчуванню користувач - root, пароль в даному випадку, порожній рядок!
connection = DriverManager.getConnection(url,
"root", "");
statement = connection.createStatement();
//Зверніть увагу, що ми створюємо БД за
допомогою executeUpdate().
statement.executeUpdate(createDatabaseQyery);
} catch (Exception e) {
e.printStackTrace();
} finally {
//тепер все закриємо
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
} } }
} }
10. Переконайтесь, що база даних була успішно побудована (рис. 7).
96
97.
Рисунок 7 – Успішна побудова баз даних11. Створіть таблицю books в новостворенній базі, яка буде містити
інформацію про книги: найменування, автор, ціна, коментарі.
Для цього створіть новий клас (рис.8).
Рисунок 8 – Створення класу CreatingTable
97
98.
Пропишіть в даному класі наступний лістинг коду:package ru.javatalks.faq.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @author user
*/
public class CreatingTable {
private final static String createTableQuery = "CREATE
TABLE `books` (" +
" `id` int(11) NOT NULL auto_increment," +
" `title` varchar(50) default NULL," +
" `comment` varchar(100) default NULL," +
" `price` double default NULL," +
" `author` varchar(50) default NULL," +
" PRIMARY KEY (`id`)" +
") ENGINE=InnoDB DEFAULT CHARSET=utf8;";
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
try {
Class.forName("com.mysql.jdbc.Driver");
//Підключаємось до новоствореної бази. Значення
параметрів після "?"
//ясно з їх імен.
String url = "jdbc:mysql://localhost/bookstore"
+
"?autoReconnect=true&useUnicode=true&characterEncoding=utf8"
;
connection = DriverManager.getConnection(url, "root",
"");
statement = connection.createStatement();
statement.executeUpdate(createTableQuery);
} catch (Exception e) {
e.printStackTrace();
} finally {
//закриваємо тепер все
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}}}}}
98
99.
12. Переконайтесь в успішній побудові таблиці (рис. 9).Рисунок 9 – Успішна побудова CreatingTable.java
13. Для виконання SQL-команд в створеній базі даних потрібно створити
об'єкт Statement. Для цієї мети буде використовуватися клас Connection:
Statement st = con.createStatement();
Потім потрібно створити рядок з необхідною SQL-командою String
sqlCommand ="select * from books"; та ResultSet, який можна використовувати
для перегляду результатів: ResulSet rs = st.executeQuery("select * from books");.
14. Напишіть код вибірки всіх рядків таблиці і виведення їх на консоль:
import
import
import
import
import
java.sql.Connection;
java.sql.DriverManager;
java.sql.ResultSet;
java.sql.SQLException;
java.sql.Statement;
public class BookStore {
private Connection con;
public BookStore() {
String url = "jdbc:mysql://localhost/bookstore" +
"?autoReconnect=true&useUnicode=true&characterEncoding=utf8";
String name = "root";
String password = "";
try {
99
100.
con = DriverManager.getConnection(url, name, password);System.out.println("Connected.");
Statement st = con.createStatement();
String query = "select * from books";
ResultSet rs = st.executeQuery(query);
printResults(rs);
System.out.println("Disconnected.");
con.close();
} catch (SQLException e) {
e.printStackTrace();
}}
private void printResults(ResultSet rs) throws SQLException
{
String author, title, comment;
double price;
while (rs.next()) {
author = rs.getString("author");
title = rs.getString("title");
comment = rs.getString("comment");
price = rs.getDouble("price");
System.out.println("******************************");
System.out.println("Author: " + author);
System.out.println("Title: " + title);
System.out.println("Price: " + price);
System.out.println("comment: " + comment);
System.out.println("******************************");
}
}
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver loading success!");
} catch (ClassNotFoundException e) {
e.printStackTrace(); }
BookStore bookStore = new BookStore();
}}
Методи getString(), getDouble(), getInt() і т.д. повертають відповідно
рядкові, дробові і цілочисельні змінні, що знаходяться в полі таблиці. Також ці
методи можуть приймати номер стовпця ResultSet в якості аргументу, при чому
нумерація починається з 1! Тоді, наприклад, rs.getInt (1) поверне значення поля
id.
14. Здійсніть перевірку працездатності програми з створеною Вами базою
даних (при необхідності виправте помилки та доопрацюйте).
15. Представте електронний варіант лабораторної роботи викладачеві для
звітності.
100
101.
Вимоги до оформлення звіту:1. Оформити звіт з зазначенням висновків та захистити роботу (знання
використаних у роботі елементів коду Java).
Література:
1. Герберт Шилдт. Полный справочник по Java: Java SE 6 Edition. – М.:
Издательский дом «Вильямс», 2007. – 1034 с.
2. Карабин П.Л. Язык программирования Java: Создание интерактивных
приложений для Internet. – М.: Бук-пресс, 2006. – 224 с.
3. Ноутон П., Шилдт Г. Java 2: Наиболее полное руководство: Пер. с англ. –
М.: Издательский дом «Вильямс», 2005. – 1034 с.
101
102.
ЛІТЕРАТУРА1. Баженова И.Ю. Язык программирования Java. – АО «Диалог-МИФИ»,
1997.
2. Беркунський Є.Ю. Об’єктно-орієнтоване програмування мовою Java:
методичні вказівки для студентів напрямку “Комп’ютерні науки”. –
Миколаїв: НУК, 2006. – 52 с.
3. Герберт Шилдт. Полный справочник по Java: Java SE 6 Edition. – М.:
Издательский дом «Вильямс», 2007. – 1034 с.
4. Герц Девид. Java Server Pages. Библиотека профессионала.: Пер. с англ. –
М.: Издательский дом «Вильямс», 2002. – 448 с.: ил.
5. Горняков С.Г. Программирование мобильных телефонов на Java 2 Micro
Edition. – М.: ДМК Пресс, 2004. – 336 с.: ил.
6. Эккель Б. Философия Java. Библиотека программиста. 4-е изд. – СПб.:
Питер, 2009. – 640 с.
7. Карабин П.Л. Язык программирования Java: Создание интерактивных
приложений для Internet. – М.: Бук-пресс, 2006. – 224 с.
8. Нотон П. JAVA: Справ. руководство: Пер. с англ. / Под ред. А. Тихонова.
– М.:БИНОМ: Восточ. Кн. Компания, 1996: Восточ. Кн. Компания. –
447 с.
9. Ноутон П., Шилдт Г. Java 2: Наиболее полное руководство: Пер. с англ. –
М.: Издательский дом «Вильямс», 2005. – 1034 с.
10. Программирование на Java / Вязовик Н.А. – М.: ИНТУИТ.РУ «Интернетуниверситет Информационных Технологий», 2003. – 592 с.
11. Р. Фишер. Java. Карманный справочник. – 2008. – 224 с.
12. Хабибуллин И.Ш. Самоучитель Java 2. – СПб.: БХВ-Петербург, 2007. –
720 с.: ил.
13. Хабибуллин И.Ш. Создание распределенных приложений на Java 2. –
СПб.: БХВ-Петербург, 2002. – 704 с.: ил.
14. Шилдт Герберт, Холмс Джеймс. Исскуство программирования на Java.:
Пер. с англ. – М.: Издательский дом «Вильямс», 2005. – 336 с.: ил.
102
103.
Прикладне програмування [Текст]: методичні вказівки доП 5.03 лабораторних занять для студентів спеціальності 121 «Інженерія
програмного забезпечення» денної форми навчання / уклад.
І.Є. Андрущак. – Луцьк: Луцький НТУ, 2016. – 104 с.
Комп’ютерний набір:
Редактор:
І.Є. Андрущак
І.Є. Андрущак
Підп. до друку
2016. Формат 60х84/16. Папір офс.
Гарн.Таймс.Ум.друк.арк. 6, 5. Обл.-вид. арк. 4,5
Тираж 50 прим. Зам. 209.
Редакційно-видавничий відділ
Луцького національного технічного університету
43018, м. Луцьк, вул. Львівська, 75
Друк – РВВ Луцького НТУ
103