КУРСОВА РОБОТА НА ТЕМУ: “СЕРІАЛІЗАЦІЯ ОБ’ЄКТІВ НА JAVA”

ЗМІСТ КУРСОВОЇ РОБОТИ

  1. Вступ    3
  2. Життєвий цикл програм на Java    4
  3. Спадкоємство класів    12
  4. Поліморфізм     30
  5. Серіалізація об’єктів     38
  6. Висновки     49
  7. Література     50

ВСТУП

Java є об’єктно-орієнтованою мовою програмування, розробленою фірмою Sun Microsystems (скорочено, Sun).

Основні переваги мови|язика|

  • Найбільший серед всіх мов|язиків| програмування ступінь|міра| переносимості|переносимий| програм.
  • Могутні стандартні бібліотеки.
  • Вбудована підтримка роботи в мережах (як локальних, так і Internet/Intranet).

    Основні недоліки|нестачі|

  • Низька, порівняно з|порівняно із| іншими мовами|язиками|, швидкодія, підвищені вимоги до об’єму|обсягу| оперативної пам’яті.
  • Великий об’єм|обсяг| стандартних бібліотек і технологій створює труднощі у вивченні мови|язика|.
  • Постійний розвиток мови|язика| викликає|спричиняє| наявність як застарілих, так і нових засобів, що мають одне і те ж функціональне призначення.

    Основні особливості

  • Java| є|з’являється| повністю|цілком| об’єктно-орієнтованою мовою|язиком|. Наприклад, C++| теж|також| є|з’являється| об’єктно-орієнтованим, але|та| в ньому є можливість|спроможність| писати програми не в об’єктно-орієнтованому стилі, а в Java| такої можливості не перебачено.
  • Реалізований з використанням інтерпретації Р-кода| (байт-кода|). Тобто програма спочатку транслюється в машинонезалежний Р-код|, а потім інтерпретується деякою програмою-інтерпретатором (віртуальна Java-машина|, JVM|).

    Версії Java|

    Є декілька версій Java (1.0, 1.1, 2.0). Остання версія Java 2.0. Це версії мови. Існують також версії стандартних засобів розробки Java-програм від Sun. Sun випускає нові версії цих стандартних засобів раз або два в рік. Раніше вони називалися JDK (Java Development Kit), в останніх версіях назва змінена на SDK (Software Development Kit). Офіційна назва поточної версії “Java (ТМ) SDK, Standart Edition, Version 1.3.1”. Попередня версія має номер 1.3.1. Як і поточна версія вона відповідає версії мови Java 2.0.

    SDK — це базове середовище розробки програм на Java. Вона є невізуальною і має безкоштовну ліцензію на використання. Є і візуальні середовища розробки (JBuilder, Semantec Cafe, VISUALJ і ін.).

    Нові версії мови|язика| і версії SDK| є|з’являються| розширенням колишніх. Це зроблено для того, щоб не виникала необхідність переписувати існуючі програми. Так програма, написана на Java| 1.0 або Java| 1.1, працюватиме і під SDK| 1.3. Правда, при компіляції деяких таких програм можуть видаватися застережливі|запобіжні| повідомлення типу|типа| “Deprecated|…”. Це означає, що в програмі використані можливості|спроможності| (класи, методи), оголошені в новій версії застарілими (deprecated|).

    Аплети

    Аплети є|з’являються| однією з важливих|поважних| особливостей Java|. Java| дозволяє будувати як звичайні|звичні| застосування, так і аплети|.

    Аплет — це невелика програма, що виконується браузером| (наприклад, на Internet| Explorer| або Netscape| Navigator|). Аплет вбудовується спеціальним чином в web-сторінку|. При завантаженні|підкочуванні| такої сторінки браузером| він виконується віртуальною Java-машиною| самого браузера|. Аплети розширюють можливості|спроможності| формування web-сорінок|.

    ЖИТТЄВИЙ ЦИКЛ ПРОГРАМИ НА JAVA|

    Під життєвим циклом ми розумітимемо процес, необхідний для створення|створіння| працюючого застосування. Для програм на Java| він відрізняється від життєвого циклу програм на інших мовах|язиках| програмування. Типова картина життєвого циклу для більшості мов|язиків| програмування виглядає приблизно так.


    Малюнок 1.

    Приблизно така схема діє у разі|в разі| використання таких популярних мов|язиків| як C++| або VB|.

    Для Java| картина інша.


    Малюнок 2.

    З малюнка видно, що початкова Java-програма має бути у файлі з розширенням java. Програма транслюється в байт-код компілятором javac.exe. Програма, що відтранслює в байт-код, має розширення class. Для запуску програми потрібно викликати інтерпретатор java.exe, вказавши в параметрах виклику, яку програму йому слід виконувати. Крім того, йому потрібно вказати, які бібліотеки потрібно використовувати при виконанні програми. Бібліотеки розміщені у файлах з розширенням jar (у попередніх версіях SDK використовувалися файли *.zip і деякі бібліотеки все ще в таких файлах).

    Структура пакету SDK|

    Пакети Java SDK є безкоштовними. Поточна версія пакету може бути отримана на офіційному сайті компанії.

    Інсталяція пакету SDK| буде, швидше за все|скоріш за все|, у вигляді одного великого exe-файла| — файлу інсталяції. Для установки SDK| цей файл потрібно запустити. При цьому буде запитаний|запросити| каталог для установки. Краще вибрати той каталог, який пропонується в інсталяції за умовчанням.

    У вибраному Вами при інсталяції каталозі буде побудована|спорудити| структура підкаталогів пакету SDK|. Коротко розглянемо|розглядуватимемо| цю структуру і з’ясуємо вміст і призначення всіх підкаталогів.

  • bin\ — каталог інструментарію розробника
  • demo\ — каталог з прикладами
  • include\ — для взаємодії з програмами на C, C++
  • include-old\ — аналогічно, але попередня версія
  • jre\ — каталог інструментарію користувача (те, що поставляється кінцевому користувачеві при установці (deployment) готового застосування)
  • jre\bin\ — Java-машина(и) (JVM)
  • jre\lib\ — бібліотеки Java для кінцевих користувачів + ряд настроювальних файлів
  • lib\ — бібліотеки Java для розробників

    Каталог bin\ містить ряд програм, які необхідні в процесі розробки Java-додатків. Зокрема, в нім розташований транслятор Java — javac.exe.

    Каталог demo\| містить|утримує| ряд|лава| прикладів|зразків|, що демонструють ті або інші можливості|спроможності| Java|. Це, як завжди, корисно і цікаво.

    Каталоги include\| і include-old\| ми зараз розглядати|розглядувати| не будемо. Вони використовуються при сумісному|спільному| використанні Java| і C++|.

    Каталог jre\ потрібний для постачання кінцевому користувачеві розробленого застосування. Він складається з двох підкаталогів jre\bin\ і jre\lib\. Підкаталог jre\bin\, зокрема, містить віртуальну машину Java (JVM) — java.exe, яка потрібна для запуску готових застосувань. Цей же файл (java.exe) можна знайти і в підкаталозі bin\. Ви можете викликати JVM як з bin\, так і з jre\bin\. Особисто я віддаю перевагу jre\bin\.

    Підкаталог jre\lib\ містить бібліотеки, необхідні для виконання готових застосувань, а також ряд конфігураційних файлів. Основна системна бібліотека знаходиться у файлі rt.jar (очевидно, від Run Time). Її необхідно підключати при трансляції і виконанні будь-якої Java-програми. Друга по важливості бібліотека i18n.jar. Якщо Вам необхідно, щоб програма підтримувала російськомовне кодування, то доведеться підключити і цю бібліотеку.

    Відступ. Продовжимо інсталяцію SDK|

    Запустивши програму інсталяції і вказавши каталог для інсталяції SDK| ми зробили майже все, що потрібне для установки робочої версії інструментальних засобів розробника. Єдина дія, яку потрібно ще провести, це — налаштування на російськомовне кодування.

    Для налаштування на те або інше кодування JVM використовує файл font.properties з jre\lib\. Там же, в jre\lib\, знаходяться заготовки цих налаштувань для різних локалізацій. Файл font.properties.ru містить налаштування для російськомовної локалізації.

    Перейменуйте font.properties у font.properties.std, а font.properties.ru у font.properties.

    Це все, що потрібно.

  • Процедура перейменування font|.properties.ru у font|.properties не потрібна, якщо в Window| встановлена|установлена| за умовчанням російська локалізація.

    Практична робота

    Розглянемо|розглядуватимемо| демонстраційний приклад|зразок| — застосування типу|типа| “Hello| World|”. Але|та| спочатку виконаємо деякі підготовчі дії, які полегшать нам життя надалі.

    Підготовчі дії

    Після|потім| інсталяції пакету SDK| можна транслювати програму на Java|, викликаючи|спричиняти| компілятор javac|.exe з|із| командного рядка. Аналогічно, для виконання можна викликати|спричиняти| JVM| (віртуальну машину Java|) прямо з|із| командного рядка — java|.exe.

    Але|та| з ряду причин зручніше створити окремі bat-файли| для трансляції і виконання Java-додатків|. Зокрема, bat-файл| дозволить підключити при необхідності будь-який набір додаткових бібліотек, коли Вам це знадобиться.

    Нижче приведені приклади|зразки| bat-файлов| трансляції і виконання. У них всі установки зроблені на основі змінної JDKHOME|, яка указує|вказує| каталог, де встановлений| SDK|. Якщо у Вас інший каталог, змініть|зраджуватимете| значення цієї змінної.

  • Файл для трансляції (j.bat)
  • REM| Компілятор JAVA|
    
  • set| JDKHOME=d:\jdk1.3
    
  • set| CLASSPATH=|.;%JDKHOME%\jre\lib\rt.jar
    
  • %JDKHOME%\bin\javac| %1 %2 %3 %4 %5
    
  • Файл для виконання (jr.bat)
  • REM| Запуск програми на JAVA|
    
  • set| JDKHOME=d:\jdk1.3
    
  • set| CLASSPATH=|.;%JDKHOME%\jre\lib\rt.jar;%JDKHOME%\jre\lib\i18n.jar
    
  • %JDKHOME%\jre\bin\java| -cp| %CLASSPATH% %1 %2 %3 %4 %5 %6
    
    Перша програма

    Для підготовки Java-програми| підійде будь-який текстовий редактор. Істотною|суттєвою| є|з’являється| тільки|лише| наявність в нім підтримка довгих імен файлів. У простому випадку Java-додаток| складається з одного java-файла|. Наберемо просту Java-програму| (файл Hello|.java):

    public| class| Hello| {
    
      public| static| void| main|(String[|] args|){
    
          System|.out.println("Hello|");
    
      }
    
    }
    

    Відкомпілюємо програму за допомогою команди

    j Hello|.java
    

    Якщо Ви набрали текст правильно, то в результаті|унаслідок| компіляції на екран нічого не буде виведено. Якщо ж немає, то на екран будуть видані повідомлення про помилки.

    Альтернативний варіант компіляції програми (без bat-файла|):

    javac|.exe Hello|.java
    

    Тепер запустимо її на виконання

    jr| Hello|
    

    На екран буде виведено одне слово Hello.

    Альтернативний варіант (без bat-файла|):

    java|.exe Hello|
    

    Зауваження

    Зверніть увагу, що при трансляції програми задається ім’я файлу (з|із| розширенням), а при виконанні ім’я файлу без розширення. Дуже часто початківці, працюючи з|із| Java| допускають тут помилки.

    Що демонструє даний приклад|зразок|

    Даний приклад|зразок| примітивний, але|та| проте|тим не менше| на цьому прикладі|зразку| можна познайомитися з|із| дуже важливими|поважними| поняттями. Отже, що демонструє даний приклад|зразок|.

  • Як ми розглянемо|розглядуватимемо| докладніше|детальний| пізніше, весь програмний код в Java| поміщений|ув’язнений| усередині|всередині| класів. Не може бути ніякого|жодного| програмного тексту (за винятком декількох спеціальних директив) поза|зовні| класом (або інтерфейсу).
  • Кожен файл з ім’ям Name.java повинен містити клас з ім’ям Name (причому, враховується регістр). Кожен public -класс з ім’ям Name має бути в своєму файлі Name.java.
  • Усередині вказаного файлу можуть бути і інші класи, але їх імена повинні відрізнятися від Name і вони не мають бути public.
  • Усередині|всередині| класу може бути конструкція
    public| static| void| main|(String[|] args|){
    
     ...
    
    }
    

    Це метод класу. Тут public|, static|, void| — це описувачі, main| — ім’я методу.

  • Вказаний метод main| є|з’являється| спеціальним випадком. При запуску Java-програми| ми указуємо|вказуємо| ім’я класу. Java-машина| шукає цей клас серед всіх доступних нею файлів *.class, і в цьому класі запускає на виконання метод main|.
  • Опис методу main| має бути в точності таким, як наведено в прикладі|зразку| (можна хіба що змінити|зраджувати| ім’я args| на якесь інше).
  • У дужках після|потім| імені методу указуються|вказують| параметри методу. Для main| -метода| параметри мають бути такими як вказано. В даному випадку String[|] указує|вказує|, що як параметри методу буде переданий|передавати| масив рядків. При виклику програми на Java| можна задати параметри виклику. Java-машина| обробить їх і сформує масив рядків, який буде переданий|передавати| в main| -метод| як параметр. Так, якщо викликати|спричиняти| програму командою
    j Hello| one| two| 3 4
    

    то усередині|всередині| програми args| буде масивом з|із| 4-х елементів

    args|[0]= "one|"
    
    args|[1]= "two|"
    
    args|[2]= "3"|
    
    args|[3]= "4"|
    

    Інша справа, що в даному випадку параметри виклику ніяк не використовуються нашою програмою — вона їх просто ігнорує.

    Знайомство з|із| демонстраційними прикладами|зразками| SDK|

    Як вже наголошувалося, до складу постачання SDK входять приклади. Вони знаходяться в каталозі demo\. Зайдемо в каталог demo\jfc\ і подивимося програми SimpleExample і SwingSet2.

    Зауваження

    Приклади|зразки| підготовлені в jar-файлах| і можна запускати їх прямо звідти. Для цього існує спеціальна опція JVM| — “-jar|”.

    Запустити приклад|зразок| SimpleExample| можна за допомогою наступного|такого| командного рядка

    java|.exe -jar| SimpleExample|.jar
    

    Розгляньте ці приклади уважно. Ці приклади показують, що Java дозволяє будувати діалогові програми. Причому, приклади демонструють таку особливість Java як Look and Fill. Тобто програма на Java може бути налаштована на різні типи інтерфейсів, ряд з яких має вигляд, загальноприйнятий в тих або інших системах.

    СПАДКОЄМСТВО КЛАСІВ

    Спадкоємство класів (inheritance) один з істотних атрибутів ООП (об’єктно-орієнтованого програмування). Воно дозволяє будувати нові класи на базі тих, що існують, додаючи в них нові можливості або первизначити ті, що існують.

    Що таке спадкоємство.

    Хай|нехай| є клас A, він має поля a1|, a2|…, an| і методи f1|(), f2|(),…, fm|(). Тоді ми можемо на його основі побудувати|спорудити| клас B. Клас B успадковує|наслідує| всі поля і методи класу A (за винятком конструкторів). Крім того, в B можна:

  • додати|добавляти| нові поля;
  • додати|добавляти| нові методи;
  • перевизначити|перевизначати| які-небудь методи класу A.

    Це в основному, без деталей.

    Синтаксис:

    class| B extends| A {

    … // тіло класу B

    }

    Усередині|всередині| записуються|занотовують| “доповнення і зміни”, що вносяться класом B.

    Клас A називають базовим класом або суперкласом (superclass|), іноді|інколи| – батьківським класом, предком. B – породженим, дочерним|, підкласом (subclass|), класом-нащадком.

    У свою чергу|своєю чергою|, клас A може бути породжений на базі іншого класу, тоді цей клас є|з’являється| предком як для A, так і для B.

    Від одного класу може бути породжена довільна кількість нових класів. В результаті виходить ієрархія класів, породжених один від одного.

    Приклад|зразок| (спадкоємство полів)

    class| Base| {

    int| а, b, з|із|;


    }

    class| Derived| extends| Base| {

    long| d, e;


    }

    Об’єкти класу Base| мають три поля (а, b і з|із|), об’єкти класу Derived| – п’ять полів (а, b, з|із|, d і e).

    Приклад|зразок| (спадкоємство методів)

    class| Base| {

    int| f(|) {


    }

    void| g(int| p){


    }

    }

    class| Derived| extends| Base| {

    long| f1|() {


    }

    }

    Клас Base| має два методи (f(|) і g(…)), клас Derived| – три методи (f(|), g(…) і f1|()).

    Приклад|зразок| (перевизначення|перевизначати| методів)

    class| Base| {

    int| f(|) {


    }

    void| g(int| p){


    }

    }

    class| Derived| extends| B {

    int| f(|) {


    }

    }

    Клас Base| має два методи (f(|) і g(…)) і клас Derived| теж|також| має два методи (f(|) і g(…)). Але|та| для об’єктів класу Derived| викликатиметься|спричинятиме| не метод f(|) з|із| Base|, а метод f(|) з|із| Derived|. На англійській мові перевизначення|перевизначати| методів називається overriding|.

    При перевизначенні|перевизначати| (overriding|) метод в породженому класі повинен мати в точності той же опис, що і метод в базовому класі. Зокрема, спроба описати “long| f()…” або навіть “private| int| f()…” привела б до помилки при трансляції програми.

    Клас Object|

    У Java| фактично всі класи будуються на базі спадкоємства, оскільки, навіть якщо не написати “Extends| ім’я_класу|”, матиметься на увазі extends| Object|. Тобто клас Object| є|з’являється| базовим класом для всіх класів Java|.

    Клас Object| має ряд|лаву| методів, при спадкоємстві методи базового класу успадковуються|наслідують| його нащадками. Отже, всі класи Java| мають як мінімум ті методи, які є в класі Object|.

    Поглянемо на документацію по класу Object|. У класі Object| визначені методи, велика частина|частка| з|із| яких мають незрозуміле для нас (на даний момент) призначення. Але|та| деякі з них ми можемо вже зараз розглянути|розглядувати|.

    public| String| toString|() Призначений для формування деякого текстового представлення об’єкту.

    protected| Object| clone|() throws| CloneNotSupportedException| Призначений для створення|створіння| копії об’єкту.

    public| boolean| equals|(Object| obj|) Дозволяє порівнювати об’єкти.

    public| final| Class| getClass|() Видає клас даного об’єкту у вигляді об’єкту класу Class|.

    protected| void| finalize|() throws| Throwable| Цей метод викликається|спричиняє| при видаленні|віддаленні| об’єкту з пам’яті збирачем сміття.

    Всі вказані методи, окрім|крім| getClass| і, частково, toString|, не призначені для безпосереднього використання (в тому сенсі, що їх потрібно перевизначити|перевизначати| в породжених класах).

    Метод getClass| повертає спеціальний об’єкт класу Class|, що містить|утримує| багато корисної інформації про клас об’єкту. Метод toString| за умовчанням видає повне|цілковите| ім’я класу об’єкту і його адресу, що можна використовувати при відладці програми.

    Якщо почитати|шанувати| документацію по решті методів, то ми побачимо, що вона, в основному, визначає, що повинен робити|чинити| той або інший метод і лише в кінці|у кінці| описується, як цей метод реалізований в класі Object|.

    Розберемо, наприклад, метод equals|. Його призначення – порівнювати об’єкти на рівність. Наявність його в класі Object| (базовому для решти всіх класів) дозволяє нам застосовувати цей метод для будь-яких об’єктів, що дуже зручно. Але|та| в класі Object| він реалізований “найжорсткішим” чином – як порівняння адрес об’єктів. Тобто при порівнянні двох об’єктів ми отримаємо|одержуватимемо| рівність тільки|лише| в тому випадку, якщо|у тому випадку , якщо| насправді це один і той же об’єкт. Природно, що найчастіше нам буде потрібно якась інша реалізація даного методу.

    Спадкоємство класів має багато пов’язаних з ним нюансів і особливостей. І надалі розгляді ми поступово розбиратимемося з|із| ними.

    Ініціалізація полів при спадкоємстві класів

    Уточнимо визначення ініціалізації об’єктів у разі|в разі| спадкоємства класів.

    Всі дії з ініціалізації виконуються етап за етапом в порядку спадкоємства класів, тобто спочатку п.1 для класу Object|, потім п.1 для наступного|такого| класу і так далі, потім п.2 в тому ж порядку|ладі| і так далі

  • При першому зверненні до класу виділяється пам’ять під статичні поля класу і виконується їх ініціалізація.
  • Виконується розподіл пам’яті під створюваний об’єкт.
  • Виконуються всі ініціалізатори нестатичних полів класу.
  • Виконується виклик конструктора класу.

    Розглянемо|розглядуватимемо| абстрактний приклад|зразок|.

    class| A {


    A(|) {…}


    }

    class| B extends| A {


    B(|) {… }


    }

    десь

    B b = new| B();

    При цьому спочатку виконається конструктор A(|), потім конструктор B().

    У даному прикладі|зразку| клас A має конструктор за умовчанням. Але|та| що робити|чинити|, якщо базовий клас, наприклад, не має конструктора за умовчанням, або ж потрібно, щоб|аби| при створенні|створінні| об’єкту спрацював|відробляв| не конструктор за умовчанням, а який-небудь інший конструктор.

    У Java| ця ситуація передбачена. Використовуючи ключове|джерельне| слово super|, можна в конструкторі породженого класу викликати|спричиняти| потрібний конструктор базового класу.

    Приклад|зразок|

    class| X {

    X(int| а) {… }


    }

    class| Y extends| X {

    Y(|) {

    super|(0);


    }


    }

    Ключове|джерельне| слово super| може використовуватися і для явного виклику методів базового класу. Це необхідно, якщо деякий метод базового класу був перевизначений|перевизначати| в породженому класі.

    Приклад|зразок|

    class| Base| {

    int| x = 1;

    long| у|біля|;

    Base|(long| у|біля|){

    this|.y = у|біля|;

    }

    Base|() {

    this|(0); // виклик конструктора Base|(long| у|біля|)

    }

    public| long| f(|) {

    return| x*y|;

    }

    }

    class| Derived| extends| Base| {

    String| name| = “”;

    Derived|(String| name|, long| par|){

    super|(par|); // виклик конструктора Base|(long| у|біля|)

    this|.name = name|;

    }

    public| long| g(int| r){

    return| r+super|.f(); // виклик методу f(|) класу Base|

    }

    public| long| f(|) {

    x++|;

    return| 2*y|;

    } }

    Розглянемо|розглядуватимемо| детально, з|із| яких полів і методів складається клас Derived|. З|із| класу Base| до нього увійшли поля x і у|біля| і метод f(). Плюс в нім визначено поле name| і методи g(…) і f(|), причому метод f(|) перевизначає однойменний метод класу Base|.

    У нашому прикладі|зразку|, в методі g(…), потрібно викликати|спричиняти| не метод f(|) класу Derived|, а метод f(|) класу Base|. При цьому застосовується ключове|джерельне| слово super|. Без нього викликався|спричиняв| б метод f(|) класу Derived|.

    Контрольне завдання|задача|

    Розглянемо|розглядуватимемо| приклад|зразок| використання класу Derived|. Потрібно визначити, що відбудеться при виконанні такого фрагмента.

    Derived| d = new| Derived|(“test|”, 10);

    long| з|із| = d.g(5);

    long| p = d.f();

    У Java| немає множинного|численного| спадкоємства

    На відміну від C++| в Java| немає множинного|численного| спадкоємства. Тобто у|біля| класу може бути тільки|лише| один базовий клас. Відповідно відношення|ставлення| спадкоємства формує строгу|сувору| ієрархію класів – ієрархію спадкоємства (дерево класів). Це добре видно|показний| на прикладі|зразку| документації.

    Відкриємо|відчинятимемо| документацію по стандартній бібліотеці Java|. Вверху будь-якої сторінки є|наявний| банер| з|із| гіперпосиланнями. Натиснемо на посиланні|засланні| “Tree|”. Ми побачимо дерево класів стандартної бібліотеки Java|.

    Практична робота

    Візьмемо наприклад|приміром| Dialog1|. Його можна реалізувати інакше, якщо використовувати апарат спадкоємства.

    // Dialog2|.java

    // 2-й приклад|зразок| візульного| застосування на Java|.

    import| java|.awt.*;

    import| java|.awt.event.*;

    import| javax|.swing.*;

    public| class| Dialog2| extends| JFrame| {

    Dialog2|() {

    super|(“Перше візуальне застосування”);

    try| {

    UIManager|.setLookAndFeel(UIManager|.getSystemLookAndFeelClassName());

    }

    catch|(Exception| e){

    }

    setSize|(300, 200);

    Container| з|із| = getContentPane|();

    з|із|.add(new| JLabel|(“Hello|, привіт”));

    WindowListener| wndCloser| = new| WindowAdapter|() {

    public| void| windowClosing|(WindowEvent| e){

    System|.exit(0);

    } }

    addWindowListener|(wndCloser|);

    setVisible|(true|);

    }

    public| static| void| main|(String[|] args|){

    new| Dialog2|();

    } }

    Цей приклад|зразок| більш відповідає стилю Java|, чим Dialog1|.

    Розглянемо|розглядуватимемо| складніший приклад|зразок|.

    // Dialog3|.java

    // Візульне застосування з|із| текстовою областю.

    import| java|.awt.*;

    import| java|.awt.event.*;

    import| javax|.swing.*;

    public| class| Dialog3| extends| JFrame| {

    JTextArea| txt|;

    Dialog3|() {

    super|(“Візульне застосування з|із| текстовою областю”);

    try| {

    UIManager|.setLookAndFeel(UIManager|.getSystemLookAndFeelClassName());

    }

    catch|(Exception| e){

    }

    setSize|(400, 200);

    Container| з|із| = getContentPane|();

    з|із|.add(new| JLabel|(“Hello|, привіт”), BorderLayout|.NORTH); // 0

    txt| = new| JTextArea|(5, 30); // 1

    JScrollPane| pane| = new| JScrollPane|(txt|); // 2

    з|із|.add(pane|, BorderLayout|.CENTER); // 3

    WindowListener| wndCloser| = new| WindowAdapter|() {

    public| void| windowClosing|(WindowEvent| e){

    System|.exit(0);

    }

    };

    addWindowListener|(wndCloser|);

    setVisible|(true|);

    }

    public| void| test|() {

    txt|.append(“Перший рядок\n|”);

    txt|.append(“Другий рядок\n|”);

    }

    public| static| void| main|(String[|] args|){

    Dialog3| d = new| Dialog3|();

    d.test();

    }

    }

    Цей приклад|зразок| вимагає деяких пояснень по принципах організації діалогу в Java|. На відміну від інших мов|язиків|, зокрема VB|, в Java| всі візуальні компоненти масштабовані. Тому при їх додаванні|добавляти| на вікно застосування не можна вказати їх координати і розміри. Замість цього використовується поняття Layout’а| (“розміщувач|”, компонувальник). В даному прикладі задіяний BorderLayout| (він є|з’являється| Layout’ом| за умовчанням для JFrame|). Потім ми докладніше|детальний| познайомимося з|із| цим поняттям. В даному випадку просто розберемо, що забезпечує BorderLayout| і як з|із| ним працювати.

    Компонувальник BorderLayout| розбиває зону вікна (панелі) на наступні|такі| частини|частки|.


    Малюнок 1.

    ЗАВАНТАЖИТИ

    Для скачування файлів необхідно або Зареєструватись

    Серіалізація об’єктів на Java (295.5 KiB, Завантажень: 1)

Сторінка: 1 2 3
завантаження...
WordPress: 23.71MB | MySQL:26 | 0,362sec