Ілюстрований самовчитель з Java › Основні компоненти › Створення власних компонентів
Створення власних компонентів. Компоненти Canvas.
Створити свій компонент, що доповнює властивості та методи компонентів AWT, що вже існують, дуже просто – треба лише утворити свій клас як розширення існуючого класу Button, TextField або іншого класу-компонента.
Якщо треба скомбінувати декілька компонентів в один, новий, компонент, то достатньо розширити клас Panel, розташувавши компоненти на панелі.
Якщо ж потрібно створити зовсім новий компонент, AWT пропонує дві можливості: створити "важкий" або "легкий" компонент. Для створення власних "важких" компонентів у бібліотеці AWT є класcanvas - порожній компонент, для якого створюється свій peer-об'єкт графічної системи.
Компоненти Canvas
Компонентcanvas - це порожній компонент. Клас canvas дуже простий - у ньому тільки конструктор за замовчуваннямCanvas() і порожня реалізація методуpaint(Graphics g).
Щоб створити свій "важкий" компонент, необхідно розширити клас canvas, доповнивши його потрібними полями та методами, і при необхідності перевизначити методpaint().
Наприклад, як ви помітили, на стандартній кнопці Button можна написати лише один текстовий рядок. Не можна написати кілька рядків або відобразити малюнок на кнопці. Створимо свій "важкий" компонент - кнопку з малюнком.
У лістингу 10.7 кнопка з малюнком – класFlowerButton. Малюнок задається методомdrawFiower(), а малюється методомpaint(). Методpaint(), крім того, креслить по краях кнопки внизу і праворуч відрізки прямих, що зображують тінь, що відкидається "опуклою" кнопкою. При натисканні кнопки миші на компоненті такі ж відрізки кресляться вгорі та зліва – кнопка"вдавилася". При цьому малюнок зсувається на два пікселі вправо вниз - він "вдавлюється" у площину вікна.
Крім цього, у класіFlowerButton задана реакція на натискання та відпускання кнопки миші. Це ми обговоримо в розділі 12, а поки що скажемо, що при кожному натисканні та відпусканні кнопки змінюється значення поля isDown і кнопка перекреслюється методомrepaint(). Це досягається виконанням методівmousePressed() таmouseReleased().
Для порівняння поруч розміщена стандартна кнопка типу Button того ж розміру. Мал. 10.7 показує вигляд цих кнопок.