Створення графічного інтерфейсу Java. Процес розробки простої GUI програми мовою Java Створення графічного інтерфейсу в java




Отже, логіка Game of Life реалізована. Хотілося б насолодитися процесом споглядання різноманіття форм "Життя" на екрані свого монітора. Що для цього знадобиться?

Саме вікно з меню та кнопками, а також його поведінка створюватимуться за допомогою бібліотеки Swing.Промальовування процесу еволюції нашого «Життя» — за допомогою бібліотеки AWT(точніше, Java 2D). Це два основних пакети для створення графічних інтерфейсів Java.

Робота AWT спочатку ґрунтується на так званих peer-інтерфейсах. Суть полягає в тому, що при необхідності виведення на екран об'єкта Java операційною системою створюється парний йому графічний об'єкт, який, власне, і відображається. Ці об'єкти взаємодіють між собою під час роботи програми. Така реалізація призводить до того, що кожної платформи доводиться випускати власний JDK.

Пізніше в AWT були створені компоненти, які не використовують peer-інтерфейси - "легкі" (lightweight) компоненти. Бібліотеку цих компонентів було названо Swing. Тобто Swing є розширенням AWT.

Сама ж AWT була доповнена новими засобами малювання та виведення зображень, що отримали назву Java 2D.

З коротким описом перерахую основні елементи Swing.

Базовим будівельним блоком усієї бібліотеки візуальних компонентів Swing є JComponent. Це суперклас кожного компонента. Він є абстрактним класом, тому насправді ви не можете створити JComponent, але він містить буквально сотні функцій, які кожен компонент Swing може використовувати як результат ієрархії класів.

JFrame(Вікно програми) - основний контейнер, що дозволяє додавати до себе інші компоненти для їх організації та надання користувачеві. JFrame виступає як мост між незалежними від ОС Swing-частинами і реальною ОС, на якій вони працюють. JFrame реєструється як вікно в ОС і таким чином отримує багато знайомих властивостей вікна операційної системи.

JMenu/JMenuItem/JMenuBar— призначені для розробки системи меню JFrame. Основою будь-якої системи меню є JMenuBar, кожен JMenu та JMenuItem створюється з ним. JMenu є підкласом JMenuItem. Однак на вигляд вони мають відмінність: JMenu використовується для утримання інших JMenuItem і JMenu; JMenuItem під час вибору активізує дію.

JLabel(мітка) – призначений для опису (текстового чи графічного) інших елементів.

JButton(кнопка) — основний активний компонент, який дозволяє виконати будь-які дії під час її натискання. Крім стандартних методів, що управляють відображенням компонента, містить групу методів для управління своїм станом (активна/неактивна, вибрана/не вибрана, мишка зверху/мишки немає, натиснута/віджата).

JTextField(текстове поле) — дозволяє користувачеві вводити текстові дані, які можна обробити у програмі.

JTextAreaрозвиває JTextField, дозволяючи вводити кілька рядків.

JPasswordField(поле для введення пароля) — різновид JTextField, що дозволяє приховувати символи, що вводяться.

JComboBox(комбінований список) — дозволяє користувачеві вибрати елемент із існуючого списку (або додати новий елемент до списку).

JCheckBox(прапорець)і JRadioButton(перемикач) — надають користувачеві варіанти вибору. JRadioButton зазвичай групуються разом для надання користувачеві питання з примусовою відповіддю (відповіді взаємовиключні – може бути лише одна відповідь на запитання). Як тільки ви вибрали JRadioButton, ви не можете зняти його позначку доти, доки не виберете інший варіант із групи. JCheckBox працює інакше. Він дозволяє відзначати/знімати позначку з варіанта у будь-який час та вибирати кілька відповідей на запитання. Класом, який дозволяє групувати разом компоненти JCheckBox чи JRadioButton, є клас ButtonGroup.

JSlider- Елемент для вибору числового значення з графічно представленого діапазону.

JSpinner -призначений для вибору групи значень. У цьому він аналогічний JComboBox, хоча їх використання не повинно бути взаємозамінним. Ви повинні використовувати JSpinner тільки для логічно послідовних варіантів - числа та дати ідеально підходять для цього. JComboBox, з іншого боку, більше гарний вибірдля подання випадкових варіантів, які не мають взаємозв'язку між собою.

JToolBarвиступає як контейнер для інших компонентів (JButtons, JComboBoxes і т.д.), які спільно утворюють панелі інструментів, що зустрічаються у більшості програм. Панелі інструментів дозволяють програмі розміщувати команди, що часто використовуються, в зручному місці і групувати їх. Зазвичай кнопки панелі інструментів відповідають командам меню.

JToolTip- це невеликі "бульбашки", які спливають, коли ви наводите і тримаєте курсор мишки над чимось. Вони можуть бути дуже корисні в програмах, надаючи підказки для елементів, деталізуючи інформацію або навіть показуючи повний текст елемента в стислих UI. Вони активізуються в Swing, якщо залишити курсор мишки над компонентом певну кількість часу; зазвичай вони з'являються приблизно через секунду після зупинки мишки і залишаються видимими, поки курсор залишається над компонентом.

JOptionPane— клас для надання UI-розробникам способу надання простих повідомлень (про помилку або іншу інформацію) та швидкого отримання даних (наприклад, імені або номера).

JScrollPane - Swing-компонент для обробки всіх дій прокручування.

JListє корисним компонентом для надання користувачеві багатьох варіантів вибору. Ви можете представляти його як розширення JComboBox. JList надає більше варіантів та додає можливість вибору кількох варіантів. Вибір між JList і JComboBox часто полягає в наступному: якщо вам потрібна можливість множинного вибору або є більш ніж 15 варіантів (хоча це число не є загальним правилом), ви повинні завжди вибирати JList. Ви повинні використовувати JList спільно з JScrollPane, оскільки він може надавати більше варіантів, ніж міститься у видимій області. JList має також модель вибору, яку ви можете встановити у різні типивибору варіантів. Такими типами є: одиночний вибір (ви можете вибрати тільки один варіант), одиночний інтервал (ви можете вибрати суміжні варіанти, але в будь-якій їх кількості) та множинний інтервал (ви можете вибрати будь-яку кількість варіантів у будь-яких комбінаціях).

Опис презентації Створення графічного інтерфейсу на Java Графічні бібліотеки зі слайдів

Графічні бібліотеки Java У Java є такі пакети до створення графічних інтерфейсів: Abstract Windows Toolkit (AWT) — поставляється з JDK, кожен AWT-компонент має свій візуальний компонент (peer) для конкретної ОС, переносимість забезпечується пакетом java. awt. peer; обмежений набір графічних компонентів; Зовнішній вигляд залежить від ОС. Standard Widget Toolkit (SWT) - поставляється окремо для конкретних ОС, включена в середовище Eclipce, взаємодіють з ОС за допомогою peer-інтерфейсів, на відміну від AWT, розширений асортимент компонентів. Swing - поставляється з JDK, розширює класи AWT, не залежить від peer-компонентів ОС. Java 3D – тривимірна графіка.

Тяжко- і легковагові компоненти Тяжковагові (heavyweight) компоненти – Відмальовуються операційною системою – Більшість AWT-компонент Легкові (ligntweight) компоненти – Відмальовуються java-кодом – Всі Swing-компоненти, крім вікон верхнього рівня (вікно додатків)

Архітектура Модель-Представлення-Контролер(MVC) Шаблон проектування MVC передбачає поділ даних програми, інтерфейсу користувача та керуючої логіки на три окремі компоненти: модель, представлення та контролер – таким чином, що модифікація кожного компонента може здійснюватися незалежно. Модель (model) зберігає дані компонента і дозволяє легко, не звертаючись до компонента, змінювати чи отримувати ці дані. Вигляд виводить дані на екран для представлення їх користувачу. Контролер (controller) визначає, як мають реагувати вид і дані моделі у відповідь дії користувача.

Переваги MVC До однієї моделі можна приєднати кілька видів, при цьому не торкаючись реалізації моделі. Наприклад, деякі дані можуть бути представлені одночасно у вигляді електронної таблиці, гістограми і кругової діаграми. Не торкаючись реалізації видів, можна змінити реакцію дії користувача (натискання мишею на кнопці, введення даних), цього достатньо використовувати інший контролер. Ряд розробників спеціалізується лише в одній із областей: або розробляють графічний інтерфейс, або розробляють бізнес-логіку. Тому можна домогтися того, що програмісти, які займаються розробкою бізнес-логіки (моделі), взагалі не будуть обізнані про те, яке уявлення використовуватиметься.

Взаємодії між моделлю, видом та контролером Класична модель Тісний зв'язок між контролером та моделлю та контролером та видом. Подання (вид) зіставлено з єдиним Контролером і кожен Контролер з єдиним Поданням. Подання та Контролер мають пряме посилання на Модель.

Приклад MVC public class Model (private int int. Array = (1, 2, 3, 4, 5); public String get. String. Array() ( return «int. Array=» + Arrays. to. String(int. Array);) public void set. Int. Array(int index, int value) ( ​​this. int. Array = value; ) ) View view= New View(); Controller()( update. View(); ) void set. Array. Value(int index, int value) (model. set. Int. Array(index, value); update. View(); ) void update. View() ( view. show. Array(model. get. String. Array()); ) ) public class View ( public void show. Array(String array. String)( System. out. println(«View»)); System.out.println(array.String);System.out.println();))) public class 1, 4); ) )

Модель Swing спрощує реалізацію Модель не знає, з яким UI-представником вона співпрацює і який компонент її використовує, встановлює зовнішній вигляд і поведінка для всіх компонентів бібліотеки зв'язується з моделлю тільки через клас компонента. Подання-контролер обробляє події користувача та малюють компонент на екрані Кнопки, списки, таблиці, текстові поля…

Компоненти інтерфейсу Button – кнопка; JCheck. Box - кнопка-прапорець; JCombo. Box - список, що випадає; JLabel - мітка, напис; JList - список; JPassword. Field – текстове поле для прихованого введення; JProgress. Bar - компонент для відображення числа в певному діапазоні; JRadio. Button — перемикачі, радіокнопки, зазвичай використовується з компонентом Button. Group; JSlider - компонент дозволяє вибрати значення із заданого діапазону; JTable - таблиця; JText. Field - однорядкове текстове поле; JText. Area - багаторядкове текстове поле; JTree – дерево.

Контейнери інтерфейсу Частини інтерфейсу користувача, що містять інші компоненти Контейнери верхнього рівня: Frame, JFrame — вікно програми; JDialog - діалог програми; JColor. Chooser - діалог вибору кольору; JFile. Chooser - діалог вибору файлів та директорій; File. Dialog – діалог вибору файлів та директорій (awt компонент). Прості контейнери: JPanel проста панельдля угруповання елементів, включаючи вкладені панелі; JTool. Bar – панель інструментів (зазвичай це кнопки); JScrool. Pane – панель прокручування, що дозволяє прокручувати вміст дочірнього елемента; JDesktop. Pane – контейнер для створення віртуального робочого столу або додатків на основі MDI (multple-document interface); JEditor. Pane, JText. Pane – контейнери для відображення складного документа як HTML чи RTF; JTabbed. Pane - контейнер для керування закладками;

Створення вікна import java. awt. *; class Too. Simple. Frame extends Frame( public statc void main(String args)( Frame fr = new Too. Simple. Frame(); fr. set. Size(400, 150); // розмір вікна fr. set. Visible(true); / / візуалізація вікна) // кнопка закриття не працює) Swing

Вікно з нестандартною іконкою import javax. swing. *; public class Frame. Closing extends JFrame (public Frame. Closing() (super(«Заголовок Вікна»); // операція при закритті вікна set. Default. Close. Operaton(EXIT_ON_CLOSE); // при закритті вікна – вихід // значок для вікна set. Image(get. Toolkit(). get. Image(«icon. gif»));//C: / icons / icon. png // виведення на екран set. Size(300, 100); // розміри вікна ширина і висота set.Visible(true); // Візуалізація вікна )

Стандартні діалогові вікна Тип діалогового вікна Опис NFORMATION_MESSAGE Діалогове вікно відображає інформацію загального призначеннязі значком відповідного виду WARNING_MESSAGE Діалогове вікно виводить на екран попереджувальну інформацію зі значком відповідного виду QUESTION_MESSAGE . Виводиться на екран без стандартного піктограми. Діалогові вікнаможуть бути модальними або немодальними Діалогові вікна можуть бути модальними (фокус на вікні, доки не натиснута кнопка) або немодальними

Вікна введення та повідомлень import java. awt. *; import javax. swing. *; Public class Soluton ( public static void main(String args) ( JOpton. Pane. show. Message. Dialog(null , Hello, World)); String s = JOpton. Pane. show. Input. Dialog(«Введіть ваше ім'я» ); ) ) Swing

Стандартні компонувальники Java 1. Компонувальники Border. Layout (полярне розміщення). 2. Компонувальник Flow. Layout (послідовне розміщення). 3. Компонувальник. Grid. Layout (табличне розміщення). 4. Компонувальник Spring. Layout (відносне розміщення). 5. Компонувальник Box. Layout (блокове розміщення).

Полярне розташування (компонувальник Border. Layout) Значення Border. Layout. NORTH або рядок "North" - компонент розташовується вздовж верхньої (північної) межі вікна і розтягується на всю його ширину. Зазвичай розміщується панель інструментів. Значення Border. Layout. SOUTH або рядок "South" - компонент розташовується вздовж нижньої (південної) межі і розтягується на всю ширину вікна. Таке положення ідеальне для рядка стану. Значення Border. Layout. WEST або рядок «West» - компонент розташовується вздовж лівої (західної) межі вікна та розтягується на всю його висоту, проте при цьому враховуються розміри північних та південних компонентів (вони мають пріоритет). Значення Border. Layout. EAST або рядок «East» - компонент розташовується вздовж правої (східної) межі вікна. В іншому його розташування аналогічне до західного компонента. Значення Border. Layout. CENTER або рядок «Center» - компонент розміщується в центрі вікна, займаючи максимально можливий простір.

Приклад використання компонувальника Border. Layout import javax. swing. *; import java. awt. *; public class Border. Layout. Sample extends JFrame (public Border. Layout. Sample() (super(«Border. Layout. Sample»); set. Size(400, 300); set. Default. Close. Operaton(EXIT_ON_CLOSE); // отримуємо панель вмісту класу JFrame Container c = get.Content.Pane();// За замовчуванням у Swing використовується менеджер Border.Layout// додаємо компоненти в панель, використовуючи рядкові константи c. add(new JButton("Північ"), "North"); c. add(new JButton("Південь"), "South");// або константи з класу Border. Layout // JLabelелемент для відображення тексту c. add(new JLabel("Захід"), Border. Layout. WEST) c. add(new JLabel(«Схід»), Border. Layout. EAST);// якщо параметр не вказувати зовсім, компонент автоматично додасться в центр c. add(new JButton(«Центр»)); // виводимо вікно на екран set.Visible(true); )

Послідовне розміщення (компонувальник Flow. Layout) Компонувальник розміщує компоненти зліва направо, зверху донизу (за замовчуванням у панелях Jpanel). import javax. swing. *; import java. awt. *; public class Flow. Layout. Sample extends JFrame (public Flow. Layout. Sample() (super(«Flow. Layout 1»); set. Size(400, 200); set. Default. Close. Operaton(EXIT_ON_CLOSE); // отримуємо панель вмісту Container c = get. Content. Pane();// встановлюємо послідовне розташування з вирівнюванням компонентів по центру c.set.Layout(new Flow. Один»)), c. add(new JButton(«Два»)); c. add(new JButton(«Три»)); // виводимо вікно на екран set. Visible(true); String args) ( new Flow. Layout. Sample(); ) ) import java. awt. *; import javax. swing. *; Public class Soluton ( public static void main (String args) ( JOpton. Pane. show. Message. Dialog (null , "Hello, World"); ) ) Swing

Табличне розташування (компонувальник Grid. Layout) усі компоненти мають однаковий розмір. Доступний простір розбивається на однакову кількість осередків, у кожну з яких міститься компонент; всі компоненти завжди виводяться на екран, як би не було великого або мало доступного простору. import java. awt. *; import javax. swing. *; import java. utl. *; class Grid. Test extends JFrame (Grid. Test(String s)(super(s); Container c = get. Content. Pane(); // 4 рядки 4 стовпця відстані між рядками і стовпцями в пікселях c. set. Layout(new Grid). Layout(4, 4, 5, 5)), String.Tokenizer st = new String. Tokens()) c. add(new Button(st. next. Token()));set.Size(200, 200);set.Visible(true); ) Test(" Менеджер Grid. Layout"); ) ) Swing

Табличне розташування надасть кнопкам однаковий розмір, а послідовне розташування не дасть їм «розплисти» і заодно вирівняє їх по правому краю I mport java. awt. *; import javax. swing. *; public class Command. Buttons extends JFrame (public Command. Buttons() (super(«Command. Buttons»); set. Size(350, 250); set. Locaton(150, 100); set. Default. Close. Operaton(EXIT_ON_CLOSE); / / створюємо панель з табличним розташуванням для вирівнювання розмірів кнопок JPanel grid = new JPanel(new Grid. Layout(1, 2, 5, 0)); // додаємо компоненти grid.add(new JButton("OK")); grid.add(new JButton("Скасувати"));// поміщаємо отримане в панель з послідовним розташуванням, вирівняним по правому краю JPanel flow = new JPanel( new Flow.Layout(Flow.Layout.RIGHT));flow.add(grid);//отримуємо панель вмісту Container c = get.Content.Pane(); Layout.SOUTH);// виводимо вікно на екран set.Visible(true);)

Блокове розташування (компонувальник Box. Layout) Менеджер блокового розташування викладає компоненти в контейнер блоками: стовпчиком (по осі Y) або смужкою (по осі X), при цьому кожен окремий компонент можна вирівнювати по центру, по лівому або правому краю, а також по верху чи низу.

Приклад блокового розміщення import java. awt. *; import javax. swing. *; public class Box 1 extends JFrame (public Box 1() (super(«Box 1 — Y»); set. Size(400, 200); set. Default. Close. Operaton(EXIT_ON_CLOSE); // отримуємо панель вмісту Container c = get.Content.Pane();// встановлюємо блокове розташування по осі Y (стовпчиком) Box. додаємо компоненти c. add(new JButton("Один")); c. add(new JButton("Два")); c. add(new JButton("Три")); // виводимо вікно на екран set. Visible (True); 100);set.Default.Close.Operaton(EXIT_ON_CLOSE);// отримуємо панель вмісту Container c = get.Content.Pane(); (c, Box. Layout. X_AXIS); c. set. Layout(boxx); // додаємо компоненти c. add(new JButton(«Один»)); .add (New JButton («Три»)); // Виводимо вікно на екран set. Visible(true); ) ) public statc void main (String args) ( new Box 1 (); В одному з них реалізовано блочне розташування осі Y, в іншому - блочне розташування по осі X.

Давидов Антон Валерійович
Студент ТДУ, Росія, м. Тольятті
Науковий керівник: Єрофєєва Є.А.

Інтерфейс користувача на Java пройшов досить тернистий шлях становлення та розвитку. Його довгий час звинувачували в жадібності до ресурсів системи, повільної роботи та обмеженої функціональності. Поява .NET з швидшими графічними компонентами ще більше похитнула позиції Java. Але подібна конкуренція лише підганяла розробників Java до розвитку та поліпшення графічних бібліотек. І в цій статті ми побачимо, що з цього вийшло.

Abstract Window Toolkit

Abstract Window Toolkit (скорочено AWT) вперше була випущена 1995 року компанією Sun Microsystems. Це була перша спроба створити графічний інтерфейс Java. AWT виступав як прошарок, що викликає методи з бібліотек, написаних на С. А ці методи, у свою чергу, використовували графічні компоненти операційної системи. З одного боку, програма, побудована таким чином, зовні була схожа на всі інші програми в операційній системі, але з іншого, одна і та ж програма може виглядати зовсім по-різному на різних операційних системах, що ускладнювало розробку. До того ж, задля мультиплатформенності довелося уніфікувати інтерфейси викликів компонентів, що призвело до дещо урізаної функціональності. Набір компонентів також досить скромний. Наприклад, відсутні таблиці, а кнопки не можна помістити іконки. AWT намагається автоматично звільняти використані ресурси. Це впливає на продуктивність та ускладнює архітектуру. AWT простий для освоєння, але написання чогось складного викликає труднощі. Зараз AWT використовується переважно для аплетів. Oracle в Наразізаохочує перехід розробників на Swing як безпечніший.

Рис.1 – Зразок програми, написаної з використанням AWT у середовищі Windows

Після AWT, у 1998 році, Sun випустила Swing. Він повністю написаний на Java і для малювання використовує 2D. У Swing набагато більше різноманітних компонентів, ніж у AWT. Самі компоненти стало набагато простіше створювати, успадковуючи їх від існуючих. Також було введено можливість використання різних стилів та скінів. Однак, швидкість роботи ранніх версій Swing була досить низькою, а помилки в написанні програми могли взагалі призвести до зависання операційної системи.

Однак, завдяки легкому освоєнню та наявності великої кількості документації, Swing став найпопулярнішим графічним інтерфейсом Java. На його основі з'явилося безліч розширень, наприклад SwingX та JGoodies, які ще більше спрощують створення візуально складних додатків. Всі сучасні середовища програмування на Java включають графічні редактори Swing. Навіть незважаючи на те, що зараз існують сучасніші фреймворки, Swing залишається найпопулярнішим.


Рис.2 – Зразок програми, написаної за допомогою Swing

Standard Widget Toolkit

SWT був випущений компанією IBM у часи, коли Swing був ще повільним, і переважно для просування середовища програмування Eclipse. Як і AWT, SWT використовує компоненти ОС, але різних платформ використовуються різні інтерфейси взаємодії . Таким чином, для кожної операційної системи необхідно постачати окрему JAR-бібліотеку. Це дозволяє повніше використовувати функції, відповідні різним операційним системам. А компоненти, що бракують, були реалізовані за допомогою 2D. Тим не менш, SWT вийшла складнішою для освоєння, ніж Swing. Крім того, програміст має сам реалізовувати звільнення ресурсів додатком.

Рис.3 – Зразок програми, написаної за допомогою Swing

JavaFX була випущена у 2008 році компанією Oracle. Вона позиціонується як платформа для створення насиченого інтернет-додатку. Для малювання використовується графічний конвеєр, що значно прискорює роботу програми. Є великий набір вбудованих компонентів. Також є окремі компоненти для побудови графіків. Реалізовано підтримку мультимедійного контенту, анімації і навіть множинний дотик. Зовнішній виглядкомпонентів налаштовується за допомогою CSS-стилів. Крім того, набір утиліт JavaFX входить можливість зробити рідний інсталятор для найпопулярніших платформ: exe або msi для Windows, deb або rpm для Linux, dmg для Mac. На сайті Oracle є докладна документація та велика кількість готових прикладів.

Таким чином, описавши основним особливості та недоліки вищеперелічених графічних інтерфейсів, ми можемо вирішити, для яких завдань вони краще підходять. Abstract Window Toolkit більше підійде для створення аплетів. Новачку можна порекомендувати Swing через те, що для нього можна знайти величезну кількість документації в інтернеті, в тому числі і російською мовою. Для створення насичених інтернет-додатків чудово підійде JavaFX.

Список використаних джерел

    Риженко О. В. Об'єктно-орієнтоване програмування: Навчально-методичний комплекс з дисципліни за спеціальністю 010501 – "Прикладна математика та інформатика". - 2007.

    Хабібуллін І. Ш. Java 7 (4-те вид.). - БХВ-Петербург, 2012.

    Clarke J., Connors J., Bruno E. J. JavaFX: Developing Rich Internet Applications. - Pearson Education, 2009.

    Northover S., Wilson M. Swt: the standard widget toolkit, volume 1. - Addison Wesley Professional, 2004.

У цій короткій статті хочу описати процес створення невеликої програми, яка підтримує GUI мовою Java. Передбачається, що читач знайомий із основами мови Java.

І так, які інструменти нам потрібні:

  • Java Virtual Machine(OpenJDK або Oracle JDK)
  • Intellij IDEA (або інше IDE для Java)

Після встановлення необхідного софту, відкриваємо Intellij IDEAі створюємо новий проект: File -> New Project…

Я назвав проект guiBase. Як видно на скрині, папка srcне містить нічого, тому створюємо в ній наш головний клас, який містить функцію main.

Public class Main ( public static void main(String args) ( System.out.println("Hello, Govzalla!"); ) )

Зміст головного класу бачите вище. Ми вже зараз можемо створити проект ( Build project ) і запустити його ( Run ). Внизу в вашому терміналі IDEви побачите повідомлення "Hello, Govzalla!". Але як ви самі зрозуміли – GUI він не підтримує.

На даному етапі ми вже маємо працюючу програму, але без підтримки GUI. А зараз у тій самій папці srcстворимо GUI Form: New -> GUI Form

Відкриваємо створену GUI форму, натискаємо на JPanelі задаємо його ідентифікатор у полі field nameя задав panel.

Після чого перетягуємо на форму з правої сторони JTextField, JPasswordFieldі JButton:

Залишилося додати код та зв'язати нашу форму з ним. Коли ми додавали форму MainWindow, автоматично створився і клас MainWindow, цей клас є класом створеної форми, тобто. саме цей клас обслуговуватиме всі події цієї форми.

Хоча клас нашого вікна містить необхідні елементи, але навіть зараз він не має нічого спільного з GUI, тому розширимо його за допомогою JFrameі успадкуємо всю основну та необхідну функціональність GUI .

На даний момент ми маємо форму MainWindowта клас MainWindowрозширений за допомогою JFrame. Зараз нам необхідно визначити всі додані GUI елементи як зміст класу MainWindow this.getContentPane().add(panel); Після чого зміст файлу MainWindow.java буде змінено так:

Import javax.swing.*; public class MainWindow extends JFrame (private JTextField textField1; private JPasswordField passwordField1; private JButton button1; private JPanel panel; public MainWindow() ( this.getContentPane().add(panel); )

Якщо спробуєте запустити код, ви знову побачите те саме повідомлення “Hello, Govzalla!“. Справа в тому, що ми створили клас та форму до нього, але не створили інстанцію цього класу.

Настав час змінити файл Main.java і додати туди код створення нашого GUI:

Import java.awt.*; public class Main ( public static void main(String args) ( // Створюємо інстанцію класу MainWindow MainWindow mainWindow = new MainWindow(); // Упаковуємо всі елементи з нашої форми mainWindow.pack(); // Змінюємо розміри вікна mainWindowsetSi new Dimension(200, 200));// Відображаємо створене вікно mainWindow.setVisible(true); ) )

Запускаємо код

Натиснувши кнопку Button, ви помітите, що програма ніяк не реагує. Справа в тому, що ми ще не додали слухач ( Listener) для подій ( Events) кнопки Button.

Слухач подій ( Event listener) JButtonмає бути імплентацією адаптера ActionListenerтому додамо наступний код в тіло класу MainWindow:

Private class MyButtonListener implements ActionListener ( @Override public void actionPerformed(ActionEvent actionEvent) ( ) )

Метод actionPerformed() буде обробляти всі події кнопки button1, але спочатку ще необхідно вказати кнопці button1 який клас буде обробляти, тому додамо наступний код в конструктор класу MainWIndow: this.button1.addActionListener(new MyButtonListener()); Щоб наш обробник не був безглуздим додамо наступний код метод actionPerformed():

@Override public void actionPerformed(ActionEvent actionEvent) ( if (textField1.getText().equals(passwordField1.getText())) ( JOptionPane.showMessageDialog(null, "Success"); ) else ( JOptionPane.show "); ))

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

Надіслати свою гарну роботу до бази знань просто. Використовуйте форму нижче

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

Розміщено на http://www.allbest.ru/

ВСТУП

Останні кілька років розробники докладали безліч зусиль, щоб інтегрувати графіку та анімацію у свої аплети та програми Java. Використовуючи інтерфейси прикладного програмування java.awt та javax.swing, розробники можуть реалізовувати набагато складніші графічні програми, включаючи ігри, зберігачі екрану, екранні заставки та тривимірний графічний. користувальницький інтерфейс.

Мета роботи.Розрахунково-графічна робота присвячена побудові додатків із використанням графічного інтерфейсубібліотек java.awt та javax.swing.

Актуальність.На сьогоднішній день графіка має важливе значення для мов програмування. Вона дозволяє візуалізувати будь-які програми, що надає яскравості та зручності для використання тих чи інших програм. Дозволяє створювати яскраві та цікаві Web-сторінки, зручна при розробці баз даних, написанні мобільних та комп'ютерних ігор.

1. ПОСТАНОВКА ЗАДАЧІ

Графічний інтерфейс (GUI) - основний спосіб взаємодії кінцевих користувачів з java-додатком. Для розробки прикладного програмного забезпеченнямовою Java, а точніше графічного інтерфейсу додатків, зазвичай використовуються пакети AWT і Swing.

AWT (для доступу завантажується пакет java.awt) містить набір класів, що дозволяють виконувати графічні операції та створювати віконні елементи управління, подібно до того, як це робиться в VBA та Delphi;

Swing (для доступу завантажується пакет javax.swing) містить нові класи, переважно аналогічні AWT. До імен класів додається J (JButton, JLabel та ін.).

На даний момент основні класи для побудови візуальних інтерфейсів містяться у пакеті Swing. З пакету AWT використовуються класи обробки повідомлень. Найпростіше графічний додатокнаведено нижче.

import javax. swing.*;

public final class HelloWorld implements Runnable (

public static void main(String args) (

//Swing має власний керуючий потік (т.зв. dispatching thread),

//який працює паралельно з основним (у якому виконується main())

// Потоком. Якщо основний потік закінчить роботу (метод main завершиться),

//Потік, що відповідає за роботу Swing-інтерфейсу може продовжувати свою роботу.

//І навіть якщо користувач зачинив усі вікна, програма продовжить свою роботу

//(Доки живий даний потік). Починаючи з Java 6, коли всі

//компоненти знищені, керуючий потік зупиняється автоматично.

//Запускаємо весь код, що працює в потоці, що управляє, навіть ініціалізацію:

SwingUtilities.invokeLater (New HelloWorld());

public void run() (

// Створюємо вікно із заголовком "Hello, World!"

Frame f = new JFrame ("Hello, World!");

// Раніше практикувалося наступне: створювався listener та реєструвався

// на екземплярі головного вікна, який реагував на windowClosing()

// Примусовою зупинкою віртуальної машинивикликом System.exit()

// Тепер є більш "правильний" спосіб задавши реакцію на закриття вікна.

// Цей спосібзнищує поточне вікно, але не зупиняє програму. Тим

// Додаток буде працювати поки не будуть закриті всі вікна.

f.setDefaultCloseOperation (JFrame. DISPOSE_ON_CLOSE);

// проте можна поставити і так:

// f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

// Додаємо на панель вікна компонент, що не редагується, з текстом.

// f.getContentPane().add (new JLabel("Hello, World!")); - Старий стиль

f.add(new JLabel("Hello World"));

// pack() "упаковує" вікно до оптимального розміру

// всіх розміщених у ньому компонентів.

// Показати вікно

f.setVisible(true);

Технологія Swing надає механізми для керування наступними аспектами представлення:

Клавіатура (Swing надає спосіб перехоплення введення користувача);

Кольори (Swing надає спосіб змінювати кольори, які ви бачите на екрані);

Текстове поле для введення (Swing пропонує текстові компоненти для обробки всіх повсякденних завдань).

JComponent

Базовим класом усієї бібліотеки візуальних компонентів Swing є JComponent. Це суперклас інших візуальних компонентів. Він є абстрактним класом, тому насправді ви не можете створити JComponent, але він містить сотні функцій, які кожен компонент Swing може використовувати як результат ієрархії класів. Клас JComponent забезпечує інфраструктуру фарбування для всіх компонентів, він знає, як обробляти всі натискання клавіш на клавіатурі, його підкласи, отже, повинні лише прослуховувати певні клавіші. Клас JComponent також містить метод add(), який дозволяє додати інші об'єкти класу JComponent, так можна додати будь-який Swing-компонент до будь-якого іншого для створення вкладених компонентів (наприклад, JPanel, що містить JButton, або навіть більш химерні комбінації, наприклад JMenu, що містить JButton ).

JLabel

Найпростішим і водночас основним візуальним компонентом бібліотеки Swing є JLabel, або «мітка». До методів цього класу відноситься встановлення тексту, зображення, вирівнювання та інших компонентів, які описує мітка:

get/setText() - отримати/встановити текст у позначці;

get/setIcon() - отримати/встановити зображення у мітці;

get/setHorizontalAlignment - отримати/встановити горизонтальну позицію тексту;

get/setDisplayedMnemonic() - отримати/установити мнемоніку (підкреслений символ) для мітки;

get/setLabelFor() - отримати/встановити компонент, до якого приєднана ця мітка; коли користувач натискає комбінацію клавіш Alt + мнемоніка, фокус переміщається на вказаний компонент.

JButton

Основним активним компонентом у Swing є Jbutton.

Методи, які використовуються для зміни властивостей JButton, аналогічні методам JLabel (ви виявите, що вони аналогічні більшості Swing-компонентів). Вони керують текстом, зображеннями та орієнтацією:

get/setText() - отримати/встановити текст у кнопці;

get/setIcon() - отримати/встановити зображення у кнопці;

get/setHorizontalAlignment() - отримати/встановити горизонтальну позицію тексту;

get/setVerticalAlignment() - отримати/встановити вертикальну позицію тексту;

get/setDisplayedMnenomic() - отримати/встановити мнемоніку (підкреслений символ), яка у комбінації з кнопкою Alt викликає натискання кнопки.

JFrame

Клас JFrame є контейнером, що дозволяє додавати до себе інші компоненти для їх організації та надання користувачеві.

JFrame виступає як мост між незалежними від конкретної операційної системи Swing-частинами і реальною операційною системою, на якій вони працюють. JFrame реєструється як вікно і таким чином отримує багато властивостей вікна операційної системи: мінімізація/максимізація, зміна розмірів та переміщення. Хоча виконання лабораторної роботидосить вважати JFrame палітрою, де ви розміщуєте компоненти. Перерахуємо деякі з методів, які можна викликати в JFrame для зміни його властивостей:

get/setTitle() - отримати/встановити заголовок кадру;

get/setState() - отримати/встановити стан кадру (мінімізувати, максимізувати тощо);

is/setVisible() - отримати/встановити видимість кадру, тобто відображення на екрані;

get/setLocation() - отримати/встановити розташування у вікні, де кадр повинен з'явитися;

get/setSize() - отримати/встановити розмір кадру;

add() - додати компоненти до кадру.

Схеми, моделі та події

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

Схеми (Layout). Swing містить безліч схем, які являють собою класи, що керують розміщенням компонентів у додатку і тим, що має статися з ними при зміні розмірів вікна програми або видалення або додавання компонентів.

Події (event). Програма повинна реагувати на натискання клавіш, натискання кнопки миші та все інше, що користувач може зробити.

Моделі. Для більш просунутих компонентів (списки, таблиці, дерева) і навіть для деяких більш простих, наприклад JComboBox, моделі - це найефективніший спосіб роботи з даними. Вони видаляють більшу частину роботи з обробки даних із самого компонента (згадайте MVC) і надають оболонку для загальних об'єктних класів даних (наприклад, Vector та ArrayList).

Особливу увагу, у зв'язку з необхідністю зображення динамічних сцен на візуальних компонентах, необхідно приділити класу Graphics 2D.

Індивідуальне завдання розрахунково-графічної роботи: Зобразити у вікні програми відрізок, що обертається у площині кадру навколо точки, що рухається відрізком.

графічний інтерфейс java компонент

2. РЕАЛІЗАЦІЯ ЗАВДАННЯ НА МОВІ ВИСОКОГО РІВНЯJAVA

import java.awt.*;

import java.awt.geom.*;

import java.awt.image.BufferedImage;

* Завдання 4. Зобразитив вікні програми (аплету) відрізок, обертаєтьсяв

* площині кадр навколо крапки що рухається по відрізку.

public class LB4 extends java.applet.Applet implements Runnable (

private static final long serialVersionUID= 1L;

private int w, h;

private BufferedImage bi;

private Graphics2D big;

private boolean stop=false;

private Thread timer = null;

private Color fonColor = Color. WHITE;

private Color segmentColor = Color. LIGHT_GRAY;

private Color pointColor = Color. GREEN;

private Segment segment;

// початкове розташування малюнку

private double lengthSegment;

// напрямок зміщення осі обертання

private double movePoint = -1;

private double shift = 0;

private double speedPoint = 1;

// швидкість зміни положенняв просторі

private int speedRepaint = 30;

// кут на Котрий відбувається зміни положення відрізка

private int grad = 15;

/** Цей метод буде викликаний після завантаження аплету */

public void init() (

// Створюємо об'єктиі встановлюємо початкові значення.

Dimension dim = getSize();

// Створюємо Segment, задаючи довжину

lengthSegment = (double) Math. min(w, h)/3;

segment = new Segment(lengthSegment, lengthSegment / 2, grad,

segmentColor, pointColor, fonColor);

bi = (BufferedImage) createImage(w, h);

big = bi.createGraphics();

big.setRenderingHint(RenderingHints. KEY_ANTIALIASING,

Поверненняхвилин. VALUE_ANTIALIAS_ON);

// Створюємо потік, Котрий буде періодично викликати метод update.

timer = New Thread (this);

) catch (Exception e) (

System. out.println(e);

) // end init

// Цей метод виконує перемалювання вікна аплету

public void update(Graphics g) (

// Отримуємо покажчик на об'єкт Graphics2D

Graphics2D g2 = (Graphics2D) g;

// Малюємо готове зображення на екрані

g2.drawImage(bi, 0, 0, this);

) catch (Exception error) (

System. out.println(error.getMessage());

private void grawSegment() (

* //Очищаємо малюнок big.setBackground(Color.BLUE); big.clearRect(0, 0,

// Малюємо відрізок

shift += movePoint * speedPoint;

if (shift< -lengthSegment / 2) {

movePoint * = -1;

shift = -lengthSegment/2;

) else if (shift > lengthSegment / 2) (

movePoint * = -1;

shift = lengthSegment/2;

segment.setPos(shift, speedPoint);

segment.rotate();

big.drawImage(segment.getSegment(), null, 0, 0);

// Цей метод виконуєтьсяв окремому потоці(Тімер).

// Він викликає перемалювання вікна аплету кожну секунду.

public void run() (

Thread. currentThread();

Thread. sleep(SpeedRepaint);

) catch (Exception err) (

// Цей метод виконується якщо користувач покинув сторінку

// з аплетом. Він зупиняє потік(timer) та, відповідно,

// перемалювання вікнааплету.

public void stop() (

// Цей метод виконується, коли користувач потрапляє на сторінку

/ / З аплетом. Він запускає паралельний потік (timer).

public void start() (

if (timer == null) (

timer = New Thread (this);

// Цей метод виконується під час закриття сторінки з аплетом.

public void destroy() (

super.destroy();

Thread. currentThread();

// Чекаємо поки що паралельний потік (timer) завершить роботу.

Thread. yield();

) // end destroy

) // end public class RotatingSegment

// Створення відрізка

private static double x = 0;

final double RAD = 10;

private double length;

private BufferedImage segment;

private Color segmentColor;

private Color pointColor;

private Color backGroundColor;

private Rectangle2D.Double r;

private Ellipse2D.Double p;

private double rotationAxis;

private Point2D.Double center;

private double shift;

// Кут на який відбувається зміни положення відрізка

private int grad;

Segment(double length, double posPointRotating, int grad,

Color segmentColor, Color pointColor, Color backGroundColor)

throws Exception (

// перевіряємо параметри

if (length<= 0 || posPointRotating < 0 || length < posPointRotating)

throw new Exception(

"Помилка: неправильно заданий параметр у класі Segment");

this.grad = grad;

this.segmentColor = segmentColor;

this.pointColor = pointColor;

this.backGroundColor = backGroundColor;

this.length = length;

// створюємо малюнок

segment = new BufferedImage((int) length * 3, (int) length * 3,

BufferedImage. TYPE_INT_ARGB);

центр = новий Point2D.Double(length, 3 * length / 2);

// створюємо відрізок

rotationAxis = center.x + posPointRotating - RAD/2;

p = New Ellipse2D.Double(rotationAxis, center.y, RAD, RAD);

// встановлюємо колір відрізка

g2.setColor(segmentColor);

// малюємо відрізок

// встановлюємо колір точки

g2.setColor(pointColor);

// малюємо крапку

// Зміщує точку обертання

public void setPos(double shiftX, double shiftY) (

// створюємо відрізок

this.shift = shiftX;

center.y = center.y + shiftY * Math. sin(Math. toRadians(grad * x));

r = new Rectangle2D.Double(center.x, center.y, length, RAD);

p = New Ellipse2D.Double(rotationAxis + shift, center.y, RAD, RAD);

// обертає відрізок

public void rotate() (

AffineTransform at = AffineTransform. getRotateInstance(

Math. toRadians(grad * (++ x)), rotationAxis + RAD / 2 + shift,

// Отримуємо графічний контекст

Graphics2D g2 = segment.createGraphics();

// зафарбовуємо все заданим кольором

g2.setBackground(backGroundColor);

g2.clearRect(0, 0, (int) (3 * length), (int) (3 * length));

g2.setTransform(at);

g2.setColor(segmentColor);

// малюємо відрізок

// встановлюємо колір точки

g2.setColor(pointColor);

// малюємо крапку

// Повертає зображення

public BufferedImage getSegment() (

3. ПРИКЛАД РОБОТИ ПРОГРАМИ

Результат виконання програми:

Рисунок 1. Результат виконання програми

Рисунок 2. Результат виконання програми

Рисунок 3. Результат виконання програми

ВИСНОВОК

Цим завершується розгляд графіки на Java. У цій роботі ми надали короткий огляд засобів програмування двовимірної графіки на Java. Ми представили додаток, який демонструє використання геометричних фігур, текстур.

Ми обговорили деякі графічні можливості Java. Ми розпочали з короткого знайомства з фундаментальними основами графіки, такими як системи координат та графічні контексти. Потім ми обговорили засоби Java 2D. Ми також коротко розповіли, як використовувати графічні ефекти.

Друга половина нашого знайомства з графічним програмуванням Java. Використовуючи графічний інтерфейс бібліотек java.awt та javax.swing, ми створили простий графічний редактор, який обертає двовимірний об'єкт навколо своєї осі.

СПИСОК ЛІТЕРАТУРИ

1. Х. М. Дейтел, П.Дж. Дейтел, С.І. Сантрі - Технології програмування наJava, книга 1 (графіка, JAVABEANS, інтерфейс користувача)

2. Джуді Бішоп - Ефективна робота Java

3. James Gosling, Bill Joy, Guy Steele, Gilad Bracha - The Java Language Specification, Second Edition.

4. Tim Lindholm, Frank Yellin - Java Virtual Machine Specification, Second Edition.

5. Гослінг Дж., Арнольд К. - Мова програмування Java

6. Інформація із сайту www.ibm.com

7. Інформація із сайту www.mexmat.sgu.ru

8. Інформація із сайту www.uic.rsu.ru

Розміщено на Allbest.ru

...

Подібні документи

    Структура організації графічного інтерфейсу, оголошення та створення слухачів подій за допомогою анонімних класів. Подання даних для таблиці – клас AbstractTableModel. Візуалізація осередків таблиці. Два основних типи потоків введення-виведення Java.

    лекція, доданий 01.05.2014

    Розробка графічного редактора для малювання двовимірної та тривимірної графіки, використовуючи мову програмування Java та інтерфейси прикладного програмування Java 2D та Java 3D. Створення графічного редактора 3D Paint. Основні методи класу Graphics.

    курсова робота , доданий 19.11.2009

    Опис пакету прикладної програми Net Beans 8.1. Розробка інтерфейсу аплету. Створення рамкових вікон на базі кадрів бібліотеки java.swing. Зміна кольорів текстових даних. Проектування та створення інфологічної моделі аплету.

    контрольна робота , доданий 11.07.2016

    Мережеві можливості мов програмування. Переваги використання Java-аплетів. Класи, що входять до бібліотеки java.awt. Створення інтерфейсу користувача. Сокетне з'єднання із сервером. Графіка у Java. Значення складових кольорів.

    курсова робота , доданий 10.11.2014

    Java Foundation Classes, основні концепції. Початкова ієрархія класів Abstract Window Toolkit. Представники інтерфейсу користувача. Обробка подій у JavaBeans. Елементи керування, багаторядкове поле JText. Лістинг програми TextEditor.

    курсова робота , доданий 26.06.2013

    Виконання Java програми. Набір програм та класів JDK. Об'єктно-орієнтоване програмування Java. Принципи побудови графічного інтерфейсу. Компонент та контейнер графічної системи. Аплети як програми, що працюють у середовищі браузера.

    курсова робота , доданий 08.02.2011

    Діаграма консольного застосування табулювання функції. Відмінність консольної програми та програми та GUI. Діаграма класів для JFrame і JPanel. Створення найпростішого кадру в Java. Компонування елементів інтерфейсу всередині кадру. Цикл обробки подій.

    лекція, доданий 01.05.2014

    Поняття та загальна характеристика мови програмування РНР, принципи та етапи його роботи, синтаксис та асоційовані масиви. Обробка винятків у мові Java. Робота з базами даних за допомогою JDBC. Вивчення порядку розробки графічного інтерфейсу.

    презентація , доданий 13.06.2014

    Розробка логічної схеми бази даних автомобілебудівного підприємства. Інфологічне моделювання системи. Створення графічного інтерфейсу для бази даних засобами мови програмування Java. Тестування програмних засобів.

    курсова робота , доданий 16.12.2013

    Створення консольних програм з використанням графічного інтерфейсу користувача. Зміст панелі компонентів програми С++ Builder. Використання можливостей об'єктно-орієнтованого програмування, особливості редактора коду та форм у С++.