Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Компонент Canvas




Создание собственных компонентов

Контейнер FileDialog

Контейнер FileDialog – это модальное окно с владельцем типа Frame, содержащее стандартное окно выбора файла операционной системы для открытия (константа LOAD) или сохранения (константа SAVE). Окна операционной системы создаются и помещаются в объект класса FileDialog автоматически.

В классе три конструктора:

· FileDialog (Frame owner) – создает окно с пустым заголовком для открытия файлоа;

· FileDialog (Frame owner, String title) – создает окно открытия файла с заголовком title;

· FileDialog(Frame owner, String title, int mode) – создает окно открытия или сохранения документа; аргумент mode имеет два значения: FileDialog.Load и FileDialog.Save.

Методы класса getDirectory () и getFile() возвращают только выбранный каталог и имя файла в виде строки string. Загрузку или сохранение файла затем нужно производить методами классов ввода/вывода.

Можно установить начальный каталог для поиска файла и имя файла методами setDirectory(String dir) И setFile(String fileName).

Вместо конкретного имени файла fileName можно написать шаблон, например, *.java (первые символы – звездочка и точка), тогда в окне будут видны только имена файлов, заканчивающиеся точкой и словом java.

Метод setFilenameFilter(FilenameFilter filter) устанавливает шаблон filter для имени выбираемого файла. В окне будут видны только имена файлов, подходящие под шаблон. Этот метод не реализован в SUN JDK на платформе MS Windows.

Кроме событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, при изменении размеров окна, его перемещении или удалении с экрана, а также показа на экране происходит событие windowEvent.

Создать свой компонент, дополняющий свойства и методы уже существующих компонентов AWT, очень просто – надо лишь образовать свой класс как расширение существующего класса Button, TextFieid или другого класса-компонента.

Если надо скомбинировать несколько компонентов в один, новый, компонент, то достаточно расширить класс Panel, расположив компоненты на панели.

Если же требуется создать совершенно новый компонент, то AWT предлагает две возможности: создать "тяжелый" или "легкий" компонент. Для создания собственных "тяжелых" компонентов в библиотеке AWT есть класс canvas – пустой компонент, для которого создается свой peer-объект графической системы.

Компонент canvas – это пустой компонент. Класс canvas очень прост – в нем только конструктор по умолчанию Canvas() и пустая реализация метода paint(Graphics g).

Чтобы создать свой "тяжелый" компонент, необходимо расширить класс canvas, дополнив его нужными полями и методами, и при необходимости переопределить метод paint ().

Например, как вы заметили, на стандартной кнопке Button можно написать только одну текстовую строку. Нельзя написать несколько строк или отобразить на кнопке рисунок. Создадим свой "тяжелый" компонент – кнопку с рисунком.

В листинге 10.7 кнопка с рисунком – класс FlowerButton. Рисунок задается методом drawFlower (), а рисуется методом paint (). Метод paint (), кроме того, чертит по краям кнопки внизу и справа отрезки прямых, изображающих тень, отбрасываемую "выпуклой" кнопкой. При нажатии кнопки мыши на компоненте такие же отрезки чертятся вверху и слева – кнопка "вдавилась". При этом рисунок сдвигается на два пиксела вправо вниз – он "вдавливается" в плоскость окна.

Кроме этого, в классе FlowerButton задана реакция на нажатие и отпускание кнопки мыши. При каждом нажатии и отпускании кнопки меняется значение поля isDown и кнопка перечерчивается методом repaint (). Это достигается выполнением методов mousePressed() и mouseReleased().

import j ava.awt.*;

import j ava.awt.event.*;

class FlowerButton extends Canvas implements MouseListener

{

private boolean isDown= false;

public FlowerButton(){

super ();

setBackground(Color. lightGray);

addMouseListener(this);

}

public void drawFlower(Graphics g, int x, int y, int w, int h)

{

g.drawOval(x + 2*w/5 - 6, y, w/5, w/5);

g.drawLine(x + w/2 - 6, y + w/5, x + w/2 - 6, y + h - 4);

g.drawOval(x + 3*w/10 -6, y + h/3 - 4, w/5, w/5);

g.drawOval(x + w/2 - 6, y + h/3 - 4, w/5, w/5);

}

public void paint(Graphics g){

int w = getSize().width, h = getSize().height;

if (isDown){

g.drawLine(0, 0, w - 1, 0);

g.drawLine(0, 1, w - 1, 1);

g.drawLine(0, 0, 0, h - 1);

g.drawLine (1, 1, 1, h - 1);

drawFlower(g, 8, 10, w, h);

}




Поделиться с друзьями:


Дата добавления: 2015-07-02; Просмотров: 265; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.