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

if ((e.getModifiers() & MouseEvent.BUTTON1 MASK) == 0) return; lastX = e.getX(); lastY = e.getY();

}

public void mouseDragged(MouseEvent e){

if ((e.getModifiers() & MouseEvent.BUTTON1 MASK) == 0) return;

Graphics g = getGraphics(); g.setColor(currColor);

g.drawLine(lastX, lastY, e.getX(), e.getY());

lastX = e.getX(); lastY = e.getY();

}

public void mouseReleased(MouseEvent e){} public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseMoved(MouseEvent e){}

}

При создании класса-с^шателя Scribble и реализации интерфейсов MouseListener и MouseMotionListener пришлось реализовать все их семь методов, хотя мы отслежива-ли только нажатие кнопки и перемещение мыши, и нам нужны были лишь методы mousePressed ( ) и mouseDragged( ). Для остальных методов мы задали пустые реализации.Чтобы облегчить задачу реализации интерфейсов, имеющих более одного метода, созданы классы-адаптеры.
Рис. 15.3. Пример работы с программой рисования
Упражнение

2. Реализуйте оставшиеся методы интерфейсов-слушателей событий мыши.

Классы-адаптеры

Классы-адаптеры представляют собой пустую реализацию интерфейсов-слушателей,имеющих более одного метода. Их имена составляются из имени события и слова"Adapter". Например, для действий с мышью есть два класса-адаптера. Выглядят ониочень просто:

public abstract class MouseAdapter implements MouseListener{ public void mouseClicked(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseMoved(MouseEvent e){} public void mouseDragged(MouseEvent e){} public void mouseWheelMoved(MouseEvent e){}

}

public abstract class MouseMotionAdapter implements MouseMotionListener{ public void mouseDragged(MouseEvent e){} public void mouseMoved(MouseEvent e){}

}

Вместо того чтобы реализовать интерфейс, можно расширять эти классы. Не бог весть что, но полезно для создания безымянного вложенного класса, как у нас и делалось для закрытия окна. Там мы использовали класс-адаптер WindowAdapter.

Классов-адаптеров всего семь. Кроме уже упомянутых трех классов, это классы

ComponentAdapter, ContainerAdapter, FocusAdapter и KeyAdapter.

Управление колесиком мыши

Колесико, дополняющее среднюю кнопку мыши, очень удобно и популярно. Его использование встроено в Java SE, начиная с версии JDK 1.4, и применяется, например, в контейнере JScrollPane. Если же разработчику нужно создать свой компонент, в котором прокрутка осуществляется колесиком мыши, то он может задать обработку события MouseWheelEvent.

Класс MouseWheelEvent расширяет класс MouseEvent, следовательно, содержит все его поля и методы. Дополнительно он различает два типа прокрутки: прокрутку блока, отмечаемую статическим полем wheel_block_scroll, и прокрутку одной единицы — статическое поле wheel_unit_scroll. Тип прокрутки, а также смысл понятий "блок" и "единица" определяется графической оболочкой операционной системы и возвращается методом getScrollType (). Например, блок — это страница текста, а единица — одна строка.

Если тип прокрутки WHEEL_UNIT_SCROLL, то метод getUnitsToScroll() возвращает количество прокрученных единиц с учетом направления вращения колесика: на себя — положительное число, от себя — отрицательное. Метод getScrollAmount () возвращает то же число без знака. Конкретное значение зависит от платформы.

Если же разработчик не хочет использовать понятие "единица", то он может методом getWheelRotation () отследить количество "щелчков", сделанных колесиком во время прокрутки. При этом положительное число возвращается при повороте колесика на себя и означает прокрутку вниз, а отрицательное — при повороте колесика от себя, прокрутка вверх.

Интерфейс MouseWheelListener описывает один метод

public void mouseWheelMoved(MouseWheelEvent e);

которому передается объект-событие, происшедшее в результате вращения колесика мыши. В листинге 15.5 приведен тренировочный пример работы с колесиком мыши.

Листинг 15.5. Событие колесика мыши

import java.awt.*; import java.awt.event.*; import javax.swing.*;

public class WheelEv extends JFrame

implements MouseWheelListener{

JTextArea ta = new JTextArea(5, 30);

WheelEv(){

super(" Колесико мыши"); getContentPane().add(ta);

ta.addMouseWheelListener(this); setSize(400, 400);

setDefaultCloseOperation(EXIT ON CLOSE); setVisible(true);

}

public void mouseWheelMoved(MouseWheelEvent e){

if (e.getScrollType() == MouseWheelEvent.WHEEL UNIT SCROLL) ta.append(" Единицы = " + e.getUnitsToScroll() +

" Количество = "+ e.getScrollAmount() +

" Вращение = " + e.getWheelRotation() + "\n");

}

public static void main(String[] args){ new WheelEv();

}

}

Рисунок 15.4 показывает конкретные значения, полученные этой программой в операционной системе Windows XP.

Рис. 15.4. Значения, полученные от колесика мыши
Перейти на страницу:

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

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.

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

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