Читаем Java 7 полностью

Переопределяйте метод getPreferredSize ().

Интересная особенность "легких" компонентов — они изначально рисуются прозрачными, незакрашенная часть прямоугольного объекта не будет видна. Это позволяет создать компонент любой видимой формы. Листинг 10.8 показывает, как можно изменить метод paint () листинга 10.7 для создания круглой кнопки и задать дополнительные методы, а рис. 10.8 демонстрирует ее вид.

Листинг 10.8. Создание круглой кнопки

getSize().height;

// Диаметр круга // Сохраняем текущий цвет // Устанавливаем серый цвет ; // Заливаем круг серым цветом

// Восстанавливаем текущий цвет

public void paint(Graphics g){ int w = getSize().width, h int d = Math.min(w, h);

Color c = g.getColor(); g.setColor(Color.lightGray); g.fillArc(0, 0, d, d, 0, 360); g.setColor(c); if (isDown){

g.drawArc(0, 0, d, d, 43, 180)

g.drawArc(1, 1, d — 2, d — 2, 43, 180); drawFlower(g, 8, 10, d, d);

}else{

g.drawArc(0, 0, d, d, 229, 162); g.drawArc(1, 1, d — 2, d — 2, 225, 170); drawFlower(g, 6, 8, d, d);

}

}

public Dimension getPreferredSize(){ return new Dimension(30,30);

}

public Dimension getMinimumSize(){ return getPreferredSize();

}

public Dimension getMaximumSize(){ return getPreferredSize();

}

Рис. 10.8. Круглая кнопка

Сразу же надо дать еще одну рекомендацию. "Легкие" контейнеры не занимаются обработкой событий без специального указания. Поэтому в конструктор "легкого" компонента следует включить обращение к методу enableEvents () для каждого типа событий. В нашем примере в конструктор класса FlowerButton полезно добавить строку

enableEvents(AWTEvent.MOUSE_EVENT_MASK);

на случай, если кнопка окажется в "легком" контейнере. Подробнее об этом мы поговорим в главе 15.

Упражнение

2. Создайте треугольную кнопку.

Создание меню

В контейнер типа Frame заложена возможность установки стандартной строки меню (menu bar), располагаемой ниже строки заголовка, как показано на рис. 10.9. Эта строка — объект класса MenuBar.

Рис. 10.9. Система меню

Все, что нужно сделать для установки строки меню в контейнере Frame, — это создать объект класса MenuBar и обратиться к методу setMenuBar ( ) :

Frame f = new Frame("Пример меню");

MenuBar mb = new MenuBar(); f.setMenuBar(mb);

Если имя mb не понадобится, можно совместить два последних обращения к методам:

f.setMenuBar(new MenuBar());

Разумеется, строка меню еще пуста и пункты меню не созданы.

Каждый элемент строки меню — выпадающее меню (drop-down menu ) — это объект класса Menu.

Создать эти объекты и занести их в строку меню ничуть не сложнее, чем создать строку меню:

Menu mFile = new Menu("Файл"); mb.add(mFile);

Menu mEdit = new Menu("Правка"); mb.add(mEdit);

Menu mView = new Menu("Вид"); mb.add(mView);

Menu mHelp = new Menu("Справка"); mb.setHelpMenu(mHelp);

и т. д. Элементы располагаются слева направо в порядке обращения к методам add (), как показано на рис. 10.9. Во многих графических системах принято меню Справка (Help) прижимать к правому краю строки меню. Это достигается обращением к методу setHelpMenu(), но фактическое положение меню Справка определяется графической оболочкой.

Затем определяем каждое выпадающее меню, создавая его пункты. Каждый пункт меню — это объект класса MenuItem. Схема его создания и добавления к меню точно такая же, как и самого меню:

MenuItem create = new MenuItem("Создать"); mFile.add(create);

MenuItem open = new MenuItem("Открыть..."); mFile.add(open);

и т. д. Пункты меню будут расположены сверху вниз в порядке обращения к методам

add().

Часто пункты меню объединяются в группы. Одна группа от другой отделяется горизонтальной чертой. На рис. 10.9 черта проведена между командами Открыть и Отправить. Эта черта создается методом addSeparator() класса Menu или определяется как пункт меню с надписью специального вида — дефисом:

mFile.add(new MenuItem("-"));

Интересно, что класс Menu расширяет класс MenuItem, а не наоборот. Это означает, что меню само является пунктом меню и позволяет задавать меню в качестве пункта другого меню, тем самым организуя вложенные подменю:

Menu send = new Menu("Отправить"); mFile.add(send);

Здесь меню send добавляется в меню mFile как один из его пунктов. Подменю send заполняется пунктами меню, как обычное меню.

Часто команды меню создаются для выбора из них каких-то возможностей, подобно компонентам Checkbox. Такие пункты можно выделить щелчком кнопки мыши или отменить выделение повторным щелчком. Эти команды — объекты класса

CheckboxMenuItem:

CheckboxMenuItem disk = new CheckboxMenuItem("Диск A:", true); send.add(disk);

send.add(new CheckboxMenuItem("Архив"));

и т. д.

Все, что получилось в результате перечисленных действий, показано на рис. 10.9.

Многие графические оболочки, но не MS Windows, позволяют создавать отсоединяемые (tear-off) меню, которые можно перемещать по экрану. Это указывается в конструкторе

Menu(String label, boolean tearOff);

Перейти на страницу:

Все книги серии В подлиннике

Java 7
Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др. Дано подробное изложение последней версии сервлетов, технологии JSP и библиотек тегов JSTL. Около двухсот законченных программ иллюстрируют рассмотренные приемы программирования. Приведена подробная справочная информация о классах и методах Core Java API.

Ильдар Шаукатович Хабибуллин

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных