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

□ getModifiers () — возвращает код клавиш , , или , если какая-нибудь одна или несколько из них были нажаты, в виде числа типа int. Узнать, какие именно клавиши были нажаты, можно сравнением со статическими константами этого класса alt_mask, ctrl_mask, meta_mask, shift_mask.

Примечание

Клавиши на PC-клавиатуре нет, ее действие часто назначается на клавишу или левую клавишу .

Вот как, например, можно отследить нажатие клавиши при щелчке по кнопке Open:

public void actionPerformed(ActionEvent ae){ if (ae.getActionCommand() == "Open" &&

(ae.getModifiers() | ActionEvent.ALT MASK) != 0){

// Какие-то действия

}

}

Обработка действий мыши

Событие MouseEvent возникает в компоненте по любой из семи причин:

□ нажатие кнопки мыши — идентификатор mouse_pressed;

□ отпускание кнопки мыши — идентификатор MOUSE_RELEASED;

□ щелчок кнопкой мыши — идентификатор mouse_clicked (нажатие и отпускание не различаются);

□ перемещение мыши — идентификатор mouse_moved;

□ перемещение мыши с нажатой кнопкой — идентификатор mouse_dragged;

□ появление курсора мыши в компоненте — идентификатор mouse_entered;

□ выход курсора мыши из компонента — идентификатор mouse_exited.

Для их обработки есть семь методов в двух интерфейсах:

public interface MouseListener extends EventListener{ 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 interface MouseMotionListener extends EventListener{ public void mouseDragged(MouseEvent e); public void mouseMoved(MouseEvent e);

}

Эти методы могут получить от параметра e координаты курсора мыши в системе координат компонента методами e. getX (), e. getY ( ) или одним методом e . getPoint ( ), возвращающим экземпляр класса Point. Координаты курсора мыши относительно всего экрана, определяемые объектом класса GraphicsConfiguration, можно получить методами

e.getXOnScreen(), e.getYOnScreen() или e.getLocationOnScreen().

Двойной щелчок кнопкой мыши можно отследить методом e.getClickCount(), возвращающим количество щелчков. При перемещении мыши возвращается 0.

Узнать, какая кнопка была нажата, можно с помощью метода e.getModifiers() класса InputEvent сравнением со следующими статическими константами класса InputEvent:

□ button1_mask — нажата первая кнопка, обычно левая;

□ button2_mask — нажата вторая кнопка, обычно средняя, или одновременно нажаты обе кнопки на двухкнопочной мыши;

□ button3_mask — нажата третья кнопка, обычно правая.

Приведем пример, уже ставший классическим. В листинге 15.4 представлен простейший вариант "рисовалки" — класс Scribble. При нажатии первой кнопки мыши методом mousePressed () запоминаются координаты курсора мыши. При протаскивании мыши вычерчиваются отрезки прямых между текущим и предыдущим положением курсора мыши методом mouseDragged(). На рис. 15.3 показан пример работы с этой программой.

Листинг 15.4. Простейшая программа рисования

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

public class ScribbleTest extends JFrame{

public ScribbleTest(String s){ super(s);

Scribble scr = new Scribble(this, 500, 500); JScrollPane pane = new JScrollPane(scr); pane.setSize(300, 300); add(pane, BorderLayout.CENTER);

JPanel p = new JPanel(); add(p, BorderLayout.SOUTH);

p.add(b1); p.add(b2); p.add(b3); p.add(b4); p.add(b5);

JButton b1 = new JButton(,,Красный,,); b1.addActionListener(scr);

JButton b2 = new JButton(,,Зеленый,,); b2.addActionListener(scr);

JButton b3 = new JButtonC'^™^'); b3.addActionListener(scr);

JButton b4 = new JButton("Черный"); b4.addActionListener(scr);

JButton b5 = new JButton("Очистить") b5.addActionListener(scr);

setDefaultCloseOperation(EXIT ON CLOSE); pack();

setVisible(true);

}

public static void main(String[] args){ new ScribbleTest(" \"Рисовалка\"");

}}

class Scribble extends JPanel implements

ActionListener, MouseListener, MouseMotionListener{ protected int lastX, lastY, w, h; protected Color currColor = Color.black; protected JFrame f;

public Scribble(JFrame frame, int width, int height){ f = frame; w = width; h = height; enableEvents (AWTEvent.MOUSE_EVENT_MASK |

AWTEvent.MOUSE_MOTION_EVENT_MASK) ; addMouseListener(this); addMouseMotionListener(this);

}

public Dimension getPreferredSize(){ return new Dimension(w, h);

}

public void actionPerformed(ActionEvent event){

String s = event.getActionCommand();

if (s.equals(,,Очистить,,)) repaint();

else if (s.equals("Красный")) currColor = Color.red;

else if (s.equals("Зеленый")) currColor = Color.green;

else if (s.equals("Синий")) currColor = Color.blue;

else if (s.equals("Черный")) currColor = Color.black;

}

public void mousePressed(MouseEvent e){

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

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

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.

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

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