Новые книги

Рассмотрены основные элементы теории организации, разновидности организаций, управление в организационных системах и основы проектирования организационных отношений. Изучение курса позволяет сформировать и развить способности проектировать организационную структуру, распределять полномочия и ответственность на основе их делегирования, оценивать условия и последствия принимаемых организационно-управленческих решений, а также другие компетенции в области формирования и развития организационной структуры, организационных отношений и корпоративной культуры.

Соответствует Федеральному государственному образовательному стандарту высшего профессионального образования третьего поколения.

Для студентов бакалавриата, изучающих управленческий цикл дисциплин, аспирантов, преподавателей, сотрудников органов местного самоуправления и специалистов, занимающихся проблемами управленческой и организаторской деятельности.
Вы никогда не задумывались о том, что вся наша современная цивилизация, со всеми ее величайшими технологическими прорывами и товарно-услуговыми благами основана на… лени? С помощью обещания что-либо сделать за нас можно продать практически все, что угодно, если бы не одно НО. И это НО – обычный страх, единственный, способный победить лень и побудить нас сделать что-то, чего совсем не хочется и даже если ооооооочень лень! А это значит, что продать все и всем можно с помощью основных человеческих пороков – лени и страха.

Книга в первую очередь рекомендована маркетологам, специалистам по продажам, руководителям компаний и всем тем, у кого есть хоть одна фобия! Здесь вы найдете массу интересных и креативных примеров, взятых из жизни. Где-то от души посмеетесь, быть может, до корней волос похолодеете, но равнодушными, верим, точно не останетесь!

Описание исходного текста



Описание исходного текста

Оглавление

События
Обработка событий
События от мыши
Аплет LineDraw
Исходный текст
Описание текста

В нашем аплете мы будем создавать объект класса Vector, который является массивом с динамически изменяемым размером. Здесь мы будем хранить координаты нарисованных линий.

Класс Vector имеет полное имя java.util.Vector, поэтому мы подключаем соответствующую библиотеку классов:

import java.util.*;

Поля класса LineDraw

В нашем классе мы определили несколько полей, предназначенных для хранения текущих координат рисуемых линий:

Dimension dmDown;
Dimension dmUp;
Dimension dmPrev;
boolean   bDrawing;
Vector    lines;

В переменную dmDown класса Dimension записываются координаты курсора на момент нажатия клавиши мыши. Если пользователь нажал клавишу мыши для того чтобы приступить к рисованию линии, это будет координатами начала линии.

Когда пользователь отпускает клавишу мыши, координаты записываются в переменную dmUp.

В процессе рисования линии метод mouseDrag стирает ранее нарисованную линию и рисует новую. Координаты конца старой линии хранятся в переменной dmPrev.

Переменная bDrawing типа boolean хранит текущее состояние аплета. Когда аплет находится в состоянии рисования линии, в эту переменную записывается значение true, а когда нет - значение false.

И, наконец, переменная lines типа Vector является динамическим массивом, в котором хранятся координаты нарисованных линий.

Метод getAppletInfo

Метод getAppletInfo возвращает название аплета и не имеет никаких особенностей.

Метод init

Метод init сбрасывает признак рисования, записывая в поле bDrawing значение false, а также создает новый динамический массив в виде объекта класса Vector:

public void init()
{
  bDrawing = false;
  lines = new Vector();
}

Метод paint

После изменения цвета фона и рисования рамки метод paint перебирает в цикле все элементы массива lines, рисуя линии:

for(int i=0; i < lines.size(); i++) 
{
  Rectangle p = 
    (Rectangle)lines.elementAt(i);

  g.drawLine( p.width, p.height, p.x, p.y);

  g.drawString("<" + p.width + "," 
    + p.height + ">", 
    p.width, p.height);

  g.drawString("<" + p.x + "," +
    p.y+ ">", p.x, p.y);
}

Для объектов класса Vector метод size возвращает количество элементов в массиве, чем мы воспользовались для проверки условия выхода из цикла.

Чтобы извлечь элемент массива по его номеру, мы применили метод elementAt, передав ему через единственный параметр номер извлекаемого элемента.

Так как в массиве хранятся объекты класса Rectangle, перед инициализацией ссылки p мы выполняем явное преобразование типов.

Координаты концов линий рисуются с помощью уже знакомого вам метода drawString.

Перед завершением работы метод paint сбрасывает признак рисования, записывая в поле bDrawing значение false:

bDrawing = false;

Метод mouseDown

В начале своей работы метод mouseDown определяет, был ли сделан одинарный щелчок клавишей мыши, или двойной. Если был сделан двойной щелчок мышью, метод удаляет все элементы из массива list, а затем перерисовывает окно аплета, вызывая метод repaint:

lines.removeAllElements();
repaint();

После перерисовки окно аплета очищается от линий.

Если же был сделан одинарный щелчок клавишей мыши, метод mouseDown сохраняет текущие координаты курсора в переменных dmDown и dmPrev, а затем сбрасывает признак рисования:

dmDown = new Dimension(x, y);
dmPrev = new Dimension(x, y);
bDrawing = false;

Метод mouseUp

Когда пользователь отпускает клавишу мыши, вызывается метод mouseUp. В его задачу входит сохранение текущих координат курсора мыши в поле dmUp, а также добавление нового элемента в массив lines:

dmUp = new Dimension(x, y);
lines.addElement(
  new Rectangle(dmDown.width, 
  dmDown.height, x, y));
repaint();

После добавления элемента в массив метод mouseUp инициирует перерисовку окна аплета, вызывая для этого метод repaint.

Заметим, что в качестве координат начала линии мы записываем в элемент массива координаты точки, где в последний раз пользователь нажимал курсор мыши. В качестве координат конца линии используются текущие координаты курсора на момент отпускания клавиши мыши.

Метод mouseDrag

До сих пор наши аплеты выполняли рисование только в методе paint, и так поступают большинство аплетов. Однако наш аплет должен рисовать линии во время перемещения курсора мыши, так как в противном случае пользователю не будет видно, как пройдет рисуемая линия.

Для того чтобы нарисовать что-либо в окне аплета, наобходимо получить контекст отображения. Методу paint этот контекст передается через парметр как объект класса Graphics. Если же вы собираетесь рисовать в другом методе, отличном от paint, необходимо получить контекст отображения, например, так:

Graphics g = getGraphics();

После получения контекста отображения и включения режима рисования (записью в переменную bDrawing значения true) метод mouseDrag стирает линию, которая была нарисована ранее, в процессе предыдущего вызова этого же метода:

g.setColor(Color.yellow);
g.drawLine(dmDown.width, dmDown.height, 
   dmPrev.width, dmPrev.height);

Для стирания линии мы рисуем ее на том же месте с использованием цвета, совпадающего с цветом фона.

Далее метод mouseDrag рисует новую линию черного цвета, соединяя точку, в которой была нажата клавиша мыши, с точкой текущего расположения курсора мыши:

g.setColor(Color.black);
g.drawLine(dmDown.width, 
  dmDown.height, x, y);

После рисования линии координаты ее конца сохраняются в поле dmPrev для стирания этой линии при следующем вызове метода mouseDrag:

dmPrev = new Dimension(x, y);
return true;

Метод mouseMove

Метод mouseMove не делает ничего, за исключением того, что он отключает режим рисования. Таким образом, простое перемещение курсора мыши над окном аплета не приводит к рисованию линий.