Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
63
Добавлен:
24.02.2016
Размер:
282.62 Кб
Скачать

Приложение LinesDraw

Задание. Создать апплет двойного назначенияLinesDraw, в окне которого можно рисовать прямые линии при помощи мыши. Для того, чтобы нарисовать в окне апплета линию, пользователь должен установить курсор в начальную точку, нажать клавишу мыши и затем, не отпуская ее, переместить курсор в конечную точку. После отпускания клавиши координаты линии должны сохраняться апплетом в массиве, после чего будет происходить перерисовка апплета. При перерисовке апплет будет пользоваться координатами всех нарисованных ранее линий. Для того, чтобы стереть содержимое окна апплета, необходимо сделать двойной щелчок в окне. При этом из массива координат должны будут удалены все элементы.

Объявление элементов класса апплета.

В классе апплета объявим следующие элементы:

int xDown, yDown; // координаты нажатия клавиши

int xPrev, yPrev; // предыдущие координаты конца линии

Vector lines; // массив координат линий

В массив linesтипаVectorбудем добавлять элементы типаRectangle, которые будут содержать координаты линии (класс Rectangle содержит элементы x, y, width, height, сохраненная линия будет идти от (x, y) до (x+width, y+height)). Для того, чтобы использовать классVector, в файл класса апплета импортируем пакетjava.util:

import java.util.*;

Инициализация апплета ( метод init()).

При инициализации апплета в методе init()создадим массивlinesпри помощи конструктора без параметровVector().

Перерисовка окна апплета (метод paint()).

Для перерисовки изображения в окне используется метод paint(), которому передается объектgтипаGraphics(g - контекст отображения для окна). Методами этого класса пользуются для вывода графической информации в окно апплета.

Сначала раскрасим фон окна и нарисуем рамку окна. Для этого сделаем следующие действия: при помощи метода size()класса апплета получим текущий размер окна - объектappSizeтипаDimension; методомg.setColor()выберем цвет фонаColor.yellow; зарисуем всю внутреннюю область окна с помощью методаg.fillRect()и объектаappSize; методомg.setColor()выберем цвет рамкиColor.black; нарисуем рамку вокруг окна методомg.drawRect(), используя объектappSize.

Дальше следует вывод всех уже нарисованных линий. Для этого: получим размер массива lines с помощью методаlines.size(); затем в цикле получим координаты каждой (i-той) линии и нарисуем ее

Rectangle p=(Rectangle)lines.elementAt(i);

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

Обработка нажатия клавиши мыши (метод mousePressed()).

Если произошло просто нажатие на клавишу, то необходимо сохранить начальную координату линии. Для этого запомним в элементах xPrevиyPrevкоординаты начала линии, которые содержатся в параметрах события, передаваемого методу mousePressed().

Обработка отпускания клавиши мыши (метод mouseReleased()).

Если установлен признак включения режима рисования, то это значит, что данная координата указателя является конечной точкой линии, и что координаты линии необходимо запомнить в массивеlines. Поэтому создадим новый объектRectangleи добавим его в массивlines:

Rectangle p=new Rectangle(xPrev,yPrev,xDown-xPrev,yDown-yPrev);

lines.addElement(p);

Затем перерисуем содержимое окна методом repaint.

Для определения двойного нажатия кнопки мыши можно воспользоваться методом getClickCount() класса MouseEvent. Этот метод возвращает число кликов мыши. Для последовательного двойного нажатия клавиши мыши это значение равно 2. При двойном нажатии мыши мы просто очищаем весь массив lines.

lines.removeAllElements();

Пример 2. Рисование в окне

import javax.swing.*;

import java.awt.*;

import java.awt.event.MouseListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.util.Vector;

public class DrawLines extends JApplet {