- •Об'єктно-орієнтовані мови. Основні принципи об'єктно-орієнтованого програмування.
- •Відмінності мови Java від інших мов програмування
- •Основні типи даних мови Java.
- •Перетворення даних в програмах на Java.
- •Пакети класів, їх створення та використання.
- •Використання рядків в мові Java. Клас String.
- •Менеджери розташування. Їх призначення та використання Розкладки
- •FlowLayout (послідовне розташування)
- •GridLayout (табличне розташування)
- •BorderLayout (полярне розташування)
- •CardLayout (блокнотне розташування)
- •GridBagLayout (коміркове розташування)
- •Пакет java.Awt. Ієрархія класів в ньому. Клас Component.
- •Контейнери. Їх призначення та загальні методи контейнерів Контейнери
- •Загальні характеристика класу Component (див 13)
- •Використання контейнера Panel та основні його методи. Панель
- •Контейнер Frame, його особливості. Frame (Фрейми)
- •Графічні засоби мови Java. Клас Canvas.
- •Реалізація роботи прапорців та пермикачів. Checkbox (Прапорець та Перемикач)
- •Клас Graphics. Малювання графічних примітивів.
- •Виведення тексту. Клас Font.
- •Повідомлення та події. Поля та методи класу Event Класи подій
- •Обробка повідомлень миші. Основні методи.
- •Виведення растрових зображень. Класи Url та Image. Завантаження растрового зображення
- •Виведення зображення
- •Клас Image
- •Способи усунення мерехтіння при виведенні інформації на екран. Усунення мерехтіння
- •Потоки. Клас Thread.Створення потоків.
- •Створення потоків
- •Виняткові ситуації. Класи Throwable, Exception, Error. 29. Методи обробки виняткових ситуацій.
- •Аплети у порівнянні з додатками
- •Проблема безпеки
- •Включення аплетів в html-документ Створення аплетів
- •Введення-виведення даних. Базові класи введення-виведення
- •Дати порівняльну характеристику протоколів стеку tcp/ip та udp.
- •Створення сокетів tcp
- •4.3 Робота з потоковими сокетами
- •Клас Socket
- •Клас ServerSocket
- •Створення сокетів udp
- •Клас DatagramSocket
- •Клас DatagramPacket
- •Приклад серверного додатку, що реалізує датаграмний сокет.
- •Приклад клієнтського додатку, що реалізує датаграмний сокет.
Клас Image
Розглянемо детальніше методи класу Image.
Методи getHeight() та getWidth(), визначені в класі Image, дозволяють визначити відповідно висоту та ширину зображення:
public abstract int getHeight(ImageObserver observer);
public abstract int getWidth(ImageObserver observer);
Оскільки при виклику цих методів зображення ще може бути не завантажено, як параметр методам передається посилання на об’єкт ImageObserver.
Метод getGraphics() дозволяє отримати позаекранний контекст зображення для рисування зображення не у вікні додатка або аплета, а в оперативній пам’яті:
public abstract Graphics getGraphics();
Ця техніка використовується для того, щоб спочатку підготувати зображення в пам’яті, а потім за один прийом відобразити його на екрані.
Способи усунення мерехтіння при виведенні інформації на екран. Усунення мерехтіння
Головним чинником цього неприємного явища є те, що зображення малюється безпосередньо перед очима користувача. Ця перерисовка помітна оку та викликає ефект мерехтіння. Стандартний вихід з цієї ситуації – подвійна буферизація.
Основна ідея полягає в тому, що поза екраном (в оперативній пам’яті) створюється зображення, і все рисування відбувається саме на цьому зображенні. Коли рисування завершується, можна скопіювати зображення на екран за допомогою лише одного метода, таким чином поновлення екрану відбудеться миттєво.
Інше джерело мерехтіння – метод update(), який викликається методом repaint(). Стандартний метод update() спочатку очищує область рисування, а потім викликає метод paint(). Щоб позбавитися від цього, достатньо просто перевизначити метод update(), щоб він просто викликав метод paint():
public void update(Graphics g)
{
paint(g);
}
Але таке просте рішення містить одну небезпеку. Справа в тому, що зображення не обов’язково покриває повністю всю прямокутну область (наприклад, фігурка людини чи щось подібне). При наступному виведенні на екран ми побачимо сліди від попереднього малюнку, якщо нове зображення його повністю не покрило.
Подвійна буферизація, хоча й більш кропітка, дозволяє повністю позбавитись від мерехтіння. Спочатку треба визначити поле нашого класу типу Image, яке буде служити позаекранним зображенням:
private Image offScreenImage;
Далі в конструкторі класу додати ініціалізацію (створення) цього поля:
offScreenImage = createImage(size().width, size().height);
І, на сам кінець, треба перевизначити метод update(), щоб він не очищував екран, а дозволяв методу paint() сформувати зображення, яке потім копіюється на екран:
public synchronized void update(Graphics g)
{
if (offScreenImage == null)
offScreenImage = createImage(size().width, size().height);
Graphics offScreenGraphics = offScreenImage.getGraphics();
offScreenGraphics.setColor(getBackground());
offScreenGraphics.fillRect(0, 0, size().width, size().height);
offScreenGraphics.setColor(g.getColor());
paint(offScreenGraphics);
g.drawImage(offScreenImage, 0, 0, width, height, this);
}
