110 likes | 288 Views
Лекція 9 . Створення графічного інтерфейсу. План лекції: 1. Основні методи створення графічних інтерфейсів 2. Бібліотека AWT (Abstract Window Toolkit) та Swing 3. Приклад створення простого вікна засобами AWT та Swing 4. Анонімні класи та елементарні прийоми обробки подій
E N D
Лекція 9. Створення графічного інтерфейсу План лекції: 1. Основні методи створення графічних інтерфейсів 2. Бібліотека AWT(Abstract Window Toolkit) та Swing 3. Приклад створення простого вікна засобами AWTта Swing 4. Анонімні класи та елементарні прийоми обробки подій 5. Прості приклади
Основні методи створення графічних інтерфейсів ► В перших версіях Java для створення елементів графічного інтерфейсу призначалась бібліотека AWT (AbstractWindowToolkit) ► Універсальність програмного коду забезпечується за рахунок того, що відображення елементів інтерфейсу виконується інструментальними засобами, призначеними для даної операційної системи (один код, але нарізних платформах він виконується у відповідності до специфіки платформи) ► Переваги такого підходу: програми працюють на любих платформах ► Головний недолік: підходить для відносно простих програм. Великі проекти (наприклад, графічні бібліотеки) в рамках цього підходу створювати важко ► На різних платформах одні й ті ж програми можуть мати різні помилки – такі програми важко тестувати
Основні методи створення графічних інтерфейсів (продовження) ► В 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)
Створення простого вікна – Приклад (Swing) import javax.swing.*; class JustAFrame extends JFrame{ public JustAFrame(inta,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); } }
Створення простого вікна – Приклад (AWT) import java.awt.*; import java.awt.event.*; class MyAdapter extends WindowAdapter{ public void windowClosing(WindowEvent we){ System.exit(0);} } class JustAFrame extends Frame{ JustAFrame(inta,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); }} Запустити
Анонімні класи Крім анонімних об’єктів, в 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(inta,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);}} Запустити
Вікно з кнопкою - AWT import java.awt.*; import java.awt.event.*; import java.util.Random; class MyFrame extends Frame{ public static int count=0; // кількість відкритих вікон MyFrame(inta,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(WindowEventve){ System.exit(0);} // закриття вікна }); btn.addActionListener(new ButtonPressed()); setVisible(true); // відображення вікна }} class ButtonPressed implements ActionListener{ private Random rnd; ButtonPressed(){ rnd = new Random();} public void actionPerformed(ActionEventae){ new MyFrame(rnd.nextInt(800),rnd.nextInt(500));} } class FrameAndButtonAWT{ public static void main(String args[]){ // створення першого вікна MyFrame frame=new MyFrame(100,100);}} Запустити