рефераты рефераты
Главная страница > Курсовая работа: Простейшие часы на Java  
Курсовая работа: Простейшие часы на Java
Главная страница
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
География экономическая география
Геодезия
Геология
Госслужба
Гражданский процесс
Гражданское право
Иностранные языки лингвистика
Искусство
Историческая личность
История
История государства и права
История отечественного государства и права
История политичиских учений
История техники
История экономических учений
Биографии
Биология и химия
Издательское дело и полиграфия
Исторические личности
Краткое содержание произведений
Новейшая история политология
Остальные рефераты
Промышленность производство
психология педагогика
Коммуникации связь цифровые приборы и радиоэлектроника
Краеведение и этнография
Кулинария и продукты питания
Культура и искусство
Литература
Маркетинг реклама и торговля
Математика
Медицина
Реклама
Физика
Финансы
Химия
Экономическая теория
Юриспруденция
Юридическая наука
Компьютерные науки
Финансовые науки
Управленческие науки
Информатика программирование
Экономика
Архитектура
Банковское дело
Биржевое дело
Бухгалтерский учет и аудит
Валютные отношения
География
Кредитование
Инвестиции
Информатика
Кибернетика
Косметология
Наука и техника
Маркетинг
Культура и искусство
Менеджмент
Металлургия
Налогообложение
Предпринимательство
Радиоэлектроника
Страхование
Строительство
Схемотехника
Таможенная система
Сочинения по литературе и русскому языку
Теория организация
Теплотехника
Туризм
Управление
Форма поиска
Авторизация




 
Статистика
рефераты
Последние новости

Курсовая работа: Простейшие часы на Java


Список литературы

1.  Учебник по JBuilder

2.  Borland® JBuilder™ Developer's Guide


Приложение

// реализация класса CircleClock

package clock;

/*

* CircleClock.java

*

* Created on май 2009 г.

*/

import java.awt.*;

import java.awt.image.*;

import java.awt.geom.*;

import java.util.Calendar;

/**

*

* @author Бочкарева Мария

*/

public class CircleClock extends java.applet.Applet implements Runnable {

/**

          *

          */

         private static final long serialVersionUID = 1L;

         private Needle hNeedle, mNeedle, sNeedle;

private ClockDial dial;

private int w, h;

private BufferedImage bi;

private Graphics2D big;

private boolean stop = false;

private Thread timer = null;

private Color dialColor = Color.YELLOW;

private Color hairLineColor = Color.GREEN;

private Color hoursColor = Color.BLACK;

private Color minutesColor = Color.BLUE;

private Color secondsColor = Color.RED;

/** Этот метод будет вызван после загрузки апплета */

public void init() {

try {

//Создаем объекты и устанавливаем начальные значения.

Dimension dim = getSize();

w = dim.width;

h = dim.height;

//устанавливаем цвета стрелок и циферблата

setColors();

//Создаем стрелки

int radius = 0;

if(w < h)

radius = w/2;

else

radius = h/2;

mNeedle = new Needle(radius, radius/5); //минутная стрелка

hNeedle = new Needle(2d/3d*radius, radius/4); //часовая стрелка

sNeedle = new Needle(radius, radius/10); //секундная стрелка

//создаем циферблат

dial = new ClockDial(radius*2, dialColor, hairLineColor);

//Создаем изображение и получаем его объект Graphics2D.

//Рисовать будем только на нем, а экран выводим уже

//готовый рисунок (т.н. двойная буферезация).

bi = (BufferedImage)createImage(w, h);

big = bi.createGraphics();

big.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_ON);

//Создаем поток, который будет периодически вызывать метод update.

timer = new Thread(this);

timer.start();

}

catch(Exception error) {

System.out.println(error.getMessage());

}

}

/** Этот метод выполняет перерисовку окна апплета */

public void update(Graphics g) {

try {

//Получаем указатель на объект Graphics2D

Graphics2D g2 = (Graphics2D)g;

grawClock();

//Рисуем готовое изображение на экране

g2.drawImage(bi, 0, 0, this);

big.setTransform(new AffineTransform());

}

catch(Exception error) {

System.out.println(error.getMessage());

}

}

private void grawClock() {

//Узнаем текущее время

Calendar curTime = Calendar.getInstance();

curTime.setTimeInMillis(System.currentTimeMillis());

double hour = curTime.get(Calendar.HOUR_OF_DAY);

double min = curTime.get(Calendar.MINUTE);

double sec = curTime.get(Calendar.SECOND);

//Очищаем рисунок

big.setBackground(Color.WHITE);

big.clearRect(0, 0, w, h);

//Рисуем циферблат

Point luCorner = new Point(0, 0);

if(w > h)

{

luCorner.x = (w - h)/2;

luCorner.y = 0;

}

else

{

luCorner.x = 0;

luCorner.y = (h - w)/2;

}

big.drawImage(dial.getClockDial(), null, luCorner.x, luCorner.y);

//Рисуем стрелки

big.setColor(hoursColor);

AffineTransform hat = new AffineTransform();

hat.translate(w/2 - hNeedle.getRotationCenter().x,

h/2 - hNeedle.getRotationCenter().y);

/*Рассчитываем угол поворота часовой стелки. Каждый час на

12-ти часовом циферблате соответствует 30-ти градусам, а 1

минута - 0.5 градуса. Затем результат переводим в радианы. */

if(hour >= 12)

hour -= 12;

double theta = (-90 + (30*hour + 0.5*min))*Math.PI/180;

hat.rotate(theta, hNeedle.getRotationCenter().x,

hNeedle.getRotationCenter().y);

big.setTransform(hat);

big.fill(hNeedle.getNeedle());

big.setColor(minutesColor);

AffineTransform mat = new AffineTransform();

mat.translate(w/2 - mNeedle.getRotationCenter().x,

h/2 - mNeedle.getRotationCenter().y);

/*Рассчитываем угол поворота минутной стелки. Каждая минута на

12-ти часовом циферблате соответствует 6-ти градусам, а 1

секунда - 0.1 градуса. Затем результат переводим в радианы. */

theta = (-90 + (6*min + 0.1*sec))*Math.PI/180;

mat.rotate(theta, mNeedle.getRotationCenter().x,

mNeedle.getRotationCenter().y);

big.setTransform(mat);

big.fill(mNeedle.getNeedle());

big.setColor(secondsColor);

AffineTransform sat = new AffineTransform();

sat.translate(w/2 - sNeedle.getRotationCenter().x,

h/2 - sNeedle.getRotationCenter().y);

/*Рассчитываем угол поворота сеундной стелки. Каждая секунда на

12-ти часовом циферблате соответствует 6-ти градусам.

Затем результат переводим в радианы. */

theta = (-90 + (6*sec))*Math.PI/180;

sat.rotate(theta, sNeedle.getRotationCenter().x,

sNeedle.getRotationCenter().y);

big.setTransform(sat);

big.fill(sNeedle.getNeedle());

}

//Этот метод читает параметры апплета, и устанавливает

//цвета стрелок и циферблата.

private void setColors() {

try {

/* Вообще-то, для задания цвета нужно число типа int, т.е. 4 байта,

но int - это число со знаком (от "-2^31" до "2:31 - 1"), а нам

нужно число с диапазоном от "0" до "2^32", т.е. те же 4 байта,

но без знака. Для этого мы сначала создаем число типа Long, а

затем, с помощью метода intValue() получаем тип int.

*/

Long dc = new Long(Long.parseLong(getParameter("dialColor"), 16));

Long hlc = new Long(Long.parseLong(getParameter("hairLineColor"), 16));

Long hnc = new Long(Long.parseLong(getParameter("hoursNeedleColor"), 16));

Long mnc = new Long(Long.parseLong(getParameter("minutesNeedleColor"), 16));

Long snc = new Long(Long.parseLong(getParameter("secondsNeedleColor"), 16));

dialColor = new Color(dc.intValue(), true);

hairLineColor = new Color(hlc.intValue(), true);

hoursColor = new Color(hnc.intValue(), true);

minutesColor = new Color(mnc.intValue(), true);

secondsColor = new Color(snc.intValue(), true);

}

catch(Exception error) {

System.out.println(error.getMessage());

}

}

//Этот метод выполняется в отдельном потоке (timer).

//Он вызывает перерисовку окна апплета каждую секунду.

public void run() {

while(!stop) {

try {

repaint();

Thread.currentThread().sleep(1000);

}

catch(Exception err) {}

}

}

//Этот метод выполняется если пользователь покинул страницу

//с апплетом. Он останавливает поток (timer) и, соответственно,

//перерисовку окна апплета.

public void stop() {

super.stop();

stop = true;

}

//Этот метод выполняется когда пользователь попадает на страницу

//с апплетом. Он запускает парралельный поток (timer).

public void start() {

super.start();

stop = false;

if(timer == null) {

timer = new Thread(this);

timer.start();

}

}

//Этот метод выполняется при закрытии страницы с апплетом.

public void destroy() {

super.destroy();

stop = true;

//Ждем пока парралельный поток (timer) завершит работу.

Thread.currentThread().yield();

}

public String[][] getParameterInfo() {

String[][] retValue = {

{"dialColor", "hex", "alfa, red, green, blue (4 bytes, from 00 to FF)"},

{"hairLineColor", "hex", "alfa, red, green, blue (4 bytes, from 00 to FF)"},

{"hoursNeedleColor", "hex", "alfa, red, green, blue (4 bytes, from 00 to FF)"},

{"minutesNeedleColor", "hex", "alfa, red, green, blue (4 bytes, from 00 to FF)"},

{"secondsNeedleColor", "hex", "alfa, red, green, blue (4 bytes, from 00 to FF)"}

};

return retValue;

}

public String getAppletInfo() {

String retValue;

retValue = "Circle Clock";

return retValue;

}

}

// реализация класса ClockDial

package clock;

/*

* ClockDial.java

*

* Created on май 2009 г.

*/

import java.awt.*;

import java.awt.geom.*;

import java.awt.image.*;

/**

*

* @author Бочкарева Мария

*/

public class ClockDial {

private double diam;

private BufferedImage dial;

private Color dialColor;

private Color hairLineColor;

/** Создает экземпляры <code>ClockDial</code>. При создании

* необходимо указать диаметр циферблата.

*

* @param diam диаметр циферблата.

*

* @param dialColor цвет циферблата.

*

* @param hairLineColor цвет черточек на циферблате.

*

* @exception IncorrectParametersException - если диаметр меньше

* или равен нулю.

*/

public ClockDial(double diam, Color dialColor, Color hairLineColor)

Страницы: 1, 2, 3, 4, 5

рефераты
Новости