Лекція 9 . Створення графічного інтерфейсу
-
Upload
kaden-hanson -
Category
Documents
-
view
42 -
download
1
description
Transcript of Лекція 9 . Створення графічного інтерфейсу
Лекція 9. Створення графічного інтерфейсу
План лекції:
1. Основні методи створення графічних інтерфейсів
2. Бібліотека AWT (Abstract Window Toolkit) та Swing
3. Приклад створення простого вікна засобами AWT та Swing
4. Анонімні класи та елементарні прийоми обробки подій
5. Прості приклади
► В перших версіях Java для створення елементів графічного інтерфейсу призначалась бібліотека AWT (Abstract Window Toolkit)
► Універсальність програмного коду забезпечується за рахунок того, що відображення елементів інтерфейсу виконується інструментальними засобами, призначеними для даної операційної системи (один код, але нарізних платформах він виконується у відповідності до специфіки платформи)
► Переваги такого підходу: програми працюють на любих платформах
► Головний недолік: підходить для відносно простих програм. Великі проекти (наприклад, графічні бібліотеки) в рамках цього підходу створювати важко
► На різних платформах одні й ті ж програми можуть мати різні помилки – такі програми важко тестувати
Основні методи створення графічних інтерфейсів
► В 1996 році Netscape створила бібліотеку IFC (Internet Foundation Classes)
► Головна ідея: елементи інтерфейсу (кнопки, меню, поля і т.п.) відображались в пустому вікні. Особливості платформи приймались до уваги лише при виборі способу відображення вікна
► Згодом Sun і Netscape об’єднали зусилля і на основі бібліотеки IFC створили бібліотеку Swing
► Бібліотека Swing не заміняє бібліотеку AWT, а доповнює її
► В Swing використовується той самий механізм обробки подій, що і в бібліотеці AWT
Основні методи створення графічних інтерфейсів (продовження)
► Вікно верхнього рівня (тобто таке, що НЕ міститься всередині ніякого іншого вікна) називається фреймом
► Для створення фрейма необхідно розширити один з базових класів (Frame з AWT або JFrame з Swing, причому клас JFrame є розширенням класу Frame)
► Зауваження: для багатьох компонентів Swing назва співпадає з назвою відповідних компонентів з AWT, але Swing-компоненти починаються з літери J
► Необхідно передбачити реакцію вікна на дії користувача – принаймні запрограмувати можливість закрити вікно. Для цього описується обробник події закриття вікна, а методом addWindowListener() добавляється відповідне посилання на обробник події
► Підключаються пакети javax.swing.* (Swing), java.awt.*, java.awt.event.* (AWT)
Створення простого вікна
import javax.swing.*;
class JustAFrame extends JFrame{public JustAFrame(int a,int b){super("Просте графічне вікно"); setSize(a,b);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);} }
class MyFrame{public static void main(String args[]){JustAFrame frame=new JustAFrame(400,300);}}
Створення простого вікна – Приклад (Swing)
import java.awt.*;import java.awt.event.*;class MyAdapter extends WindowAdapter{public void windowClosing(WindowEvent we){System.exit(0);}}class JustAFrame extends Frame{JustAFrame(int a,int b){super("Нове вікно"); MyAdapter adapter=new MyAdapter();setSize(a,b);setVisible(true);addWindowListener(adapter);}}class MyAWTFrame{public static void main(String args[]){JustAFrame frame=new JustAFrame(400,300);}}
Створення простого вікна – Приклад (AWT)
Запустити
Крім анонімних об’єктів, в Java можуть використовуватись і анонімні класи. Це робиться у випадку, коли в програмі необхідно створити лише один об’єкт такого класу.Загальний синтаксис (приклад):ActionListener listener=new ActionListener(){ ... };
В даному випадку створюється об’єкт анонімного класу, що розширює інтерфейс ActionListener, а посилання на цей об’єкт записується в інтерфейсну змінну listener
Анонімні класи
Тип об’єктної змінної
Ім’я об’єктної змінної
Суперклас чи
інтерфейс
Код з реалізацією
методів
import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.Random;class MyFrame extends JFrame{public static int count=0; MyFrame(int a,int b){count++; // кількість відкритих вікон setTitle("Вікно з кнопкою: "+count); MyPanel panel=new MyPanel(); setSize(300,200); // розмір вікна// закриття вікнаsetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocation(a,b); // положення вікнаadd(panel); // добавлено панельsetVisible(true); // відображення вікна}}
Вікно з кнопкою
class MyPanel extends JPanel{MyPanel(){// створення кнопкиJButton button=new JButton("Створити нове вікно");add(button); // добавлено кнопку на панельbutton.addActionListener(listener);} // реєстрація обробника// обробник для кнопкиActionListener listener=new ActionListener(){public void actionPerformed(ActionEvent event){Random rnd=new Random();// створення вікна з випадковими координатами положенняMyFrame frame=new MyFrame(rnd.nextInt(800),rnd.nextInt(500));}};}class FrameAndButton{public static void main(String args[]){// створення першого вікна MyFrame frame=new MyFrame(100,100);}}
Вікно з кнопкою (продовження)
Запустити
import java.awt.*;import java.awt.event.*;import java.util.Random;class MyFrame extends Frame{public static int count=0; // кількість відкритих вікон MyFrame(int a,int b){count++; // кількість відкритих вікон setTitle("Вікно з кнопкою: "+count); setLayout(null); // відключення менеджера розміщення ел-вFont f=new Font("Arial",Font.BOLD,11); // шрифт - визначенняsetFont(f); // шрифт - встановленняButton btn=new Button("Створити нове вікно");btn.setBounds(50,100,200,30); // розміри і положення кнопкиadd(btn); // кнопку добавлено у вікноsetBounds(a,b,300,200); // положення і розмір вікна
Вікно з кнопкою - AWT
addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent ve){System.exit(0);} // закриття вікна});btn.addActionListener(new ButtonPressed());setVisible(true); // відображення вікна}}class ButtonPressed implements ActionListener{private Random rnd;ButtonPressed(){rnd = new Random();}public void actionPerformed(ActionEvent ae){new MyFrame(rnd.nextInt(800),rnd.nextInt(500));}}class FrameAndButtonAWT{public static void main(String args[]){// створення першого вікна MyFrame frame=new MyFrame(100,100);}}
Вікно з кнопкою – AWT (продовження)
Запустити