JAVAfx画时钟.docx

上传人:b****8 文档编号:23867149 上传时间:2023-05-21 格式:DOCX 页数:21 大小:92.23KB
下载 相关 举报
JAVAfx画时钟.docx_第1页
第1页 / 共21页
JAVAfx画时钟.docx_第2页
第2页 / 共21页
JAVAfx画时钟.docx_第3页
第3页 / 共21页
JAVAfx画时钟.docx_第4页
第4页 / 共21页
JAVAfx画时钟.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

JAVAfx画时钟.docx

《JAVAfx画时钟.docx》由会员分享,可在线阅读,更多相关《JAVAfx画时钟.docx(21页珍藏版)》请在冰豆网上搜索。

JAVAfx画时钟.docx

JAVAfx画时钟

中南大学

 

《Java语言程序设计》

实验报告

 

题目:

运用JavaFx画时钟及实现时钟动画

学生姓名:

**

指导老师:

鲁鸣鸣

学院:

信息科学与工程学院

专业班级:

***********

完成时间:

2014/12/18

目录

摘要3

第一章绪论4

1.1实验背景4

1.2实验意义4

1.3javaFx的介绍4

第二章需求分析5

2.1题目描述5

2.2题目分析6

2.3解决方案6

第三章详细设计7

第四章运行结果17

第五章调试报告18

参考文献18

 

摘要

Java是由SunMicrosystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。

由JamesGosling和同事们共同研发,并在1995年正式推出。

Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的。

1995年更名为Java,并重新设计用于开发Internet应用程序。

用Java实现的HotJava浏览器(支持Javaapplet)显示了Java的魅力:

跨平台、动态Web、Internet计算。

从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Javaapplet。

另一方面,Java技术也不断更新。

Java自面世后就非常流行,发展迅速,对C++语言形成有力冲击。

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

基于全新的JavaFx进行了有关时钟的操作。

完成了有关时钟的绘图以及时钟的动画。

关键词:

javaFx时钟

 

第一章绪论

1.1实验背景

Java是计算机专业学生的一门专业课程,着重讲述Java这门程序设计语言的基本概念、语法和编程的技术方法对于学生从事Java的研发、使用和维护有重要意义。

通过本课程的学习,我们应能从软件开发、设计等角度去了解、分析和研究Java语言,建立起对Java的全面认识,树立全面地、发展地看问题的观点,从而加深对各种类型Java系统的了解。

该课程的学习应注重理论与实践相结合,因此实验学习掌握java语言环节中必不可少的重要内容。

通过实验的学习,使自己熟练掌握有关Java编程的基本概念、基本原理和基本思想,掌握对Java进行设计、分析和计算的方法。

1.2实验意义

通过使用javaFx进行时钟的绘图,时钟动画的实现,熟悉javaFx的使用以及这段时间对java所学知识的综合运用。

1.3javaFx介绍

这款新的JavaFX工具的基本思想类似于针对Swing的Matisse项目,它提供了与VB或Delphi非常相像的可视化编辑器,简化了Swing的开发工作。

该插件目前支持JDBC数据源、HTTP(XML/JSON)、文件系统(FileSystem)、文件数据源以及内建过滤器。

它还提供一些简单的转换器,通过他们你可以方便地将某数据源(比如REST或JSON数据源)绑定到一组组件上。

除了支持简单地拖放组件的功能外,该插件还有一个“状态”的概念。

状态从最初的主状态(masterstate)开始,你还可以给这些组件或他们的布局增加新状态。

应用运行时,比如鼠标点击的事件就可以引发状态转换,进而把你定义的行为自动反映在UI上。

每个转换还上还能附带一个简单的动画,这样,你就能快速创建缩放,渐变和旋转等特效。

该工具还有很多其他有价值的特性,如概览(通过它你可以在不同的屏幕尺度上预览应用,如同在不同的设备上一样,如桌面,移动设备和HDTV等)以及预定义模板。

利用模块你可以快速构建普通的GUI模式,比如向导按钮(取消、后退、下一步和结束等)以及索引按钮(前一步,下一步)。

你可以便捷地添加这些按钮并进行客户化。

 

第二章需求分析

2.1题目描述

实验一

基于JavaFx画出如下所示的时钟。

实验二

基于JavaFx画出如下所示可动态变化的时钟。

要求按‘start’按钮可启动时钟,按‘stop’按钮可让时钟暂停。

时钟初始时显示当前时间并开始动态变化。

 

2.2题目解析

编写程序,javaFx程序通过继承javafx.application.Application来实现的。

运用其中的方法,类进行一系列的操作,对整个时钟界面进行布局。

通过CurrentTime()时间函数获得当前时间,是整个时钟可以运行。

2.3解决方案

实验一

ClockPane类继承pane,通过clockpane构造函数,getHour(),setHour(),getMinute(),setMinute(),getSecond(),setSecond(),setCurrentTime()获得当前时间,通过paintClock()函数画出整个表盘,最后通过main()函数进入。

实验二

ClockPane类继承pane,通过clockpane构造函数,getHour(),setHour(),getMinute(),setMinute(),getSecond(),setSecond(),setCurrentTime()获得当前时间,通过paintClock()函数画出整个表盘。

设置两个bottom按钮,分别为stop,start来控制时钟的停止与运行。

最后通过main()函数进入。

 

第三章详细设计

实验一源代码:

packageqw;

importjavafx.animation.KeyFrame;

importjavafx.animation.Timeline;

importjavafx.application.Application;

importjavafx.event.ActionEvent;

importjavafx.event.EventHandler;

importjavafx.scene.control.Button;

importjavafx.scene.layout.HBox;

importjavafx.geometry.Pos;

importjavafx.stage.Stage;

importjavafx.scene.Scene;

importjavafx.scene.layout.BorderPane;

importjava.util.Calendar;

importjava.util.GregorianCalendar;

importjavafx.scene.layout.Pane;

importjavafx.scene.paint.Color;

importjavafx.scene.shape.Circle;

importjavafx.scene.shape.Line;

importjavafx.scene.text.Text;

importjavafx.util.Duration;

classClockPaneextendsPane{

privateinthour;

privateintminute;

privateintsecond;

//Clockpane'swidthandheight

privatedoublew=250,h=250;

/**Constructadefaultclockwiththecurrenttime*/

publicClockPane(){

setCurrentTime();

}

/**Constructaclockwithspecifiedhour,minute,andsecond*/

publicClockPane(inthour,intminute,intsecond){

this.hour=hour;

this.minute=minute;

this.second=second;

paintClock();

}

/**Returnhour*/

publicintgetHour(){

returnhour;

}

/**Setanewhour*/

publicvoidsetHour(inthour){

this.hour=hour;

paintClock();

}

/**Returnminute*/

publicintgetMinute(){

returnminute;

}

/**Setanewminute*/

publicvoidsetMinute(intminute){

this.minute=minute;

paintClock();

}

/**Returnsecond*/

publicintgetSecond(){

returnsecond;

}

/**Setanewsecond*/

publicvoidsetSecond(intsecond){

this.second=second;

paintClock();

}

/**Returnclockpane'swidth*/

publicdoublegetW(){

returnw;

}

/**Setclockpane'swidth*/

publicvoidsetW(doublew){

this.w=w;

paintClock();

}

/**Returnclockpane'sheight*/

publicdoublegetH(){

returnh;

}

/**Setclockpane'sheight*/

publicvoidsetH(doubleh){

this.h=h;

paintClock();

}

/*Setthecurrenttimefortheclock*/

publicvoidsetCurrentTime(){

//Constructacalendarforthecurrentdateandtime

Calendarcalendar=newGregorianCalendar();

//Setcurrenthour,minuteandsecond

this.hour=calendar.get(Calendar.HOUR_OF_DAY);

this.minute=calendar.get(Calendar.MINUTE);

this.second=calendar.get(Calendar.SECOND);

paintClock();//Repainttheclock

}

/**Painttheclock*/

publicvoidpaintClock(){

//Initializeclockparameters

doubleclockRadius=Math.min(w,h)*0.8*0.5;

doublecenterX=w/2;

doublecenterY=h/2;

//Drawcircle

Circlecircle=newCircle(centerX,centerY,clockRadius);

circle.setFill(Color.WHITE);

circle.setStroke(Color.BLACK);

Textt12=newText(centerX-3,centerY-clockRadius+12,"12");

Textt9=newText(centerX-clockRadius+3,centerY,"9");

Textt3=newText(centerX+clockRadius-12,centerY,"3");

Textt6=newText(centerX-3,centerY+clockRadius-3,"6");

Textt1=newText(centerX+clockRadius*Math.sin(Math.PI/6)-5,centerY-clockRadius*Math.cos(Math.PI/6)+12,"1");

Textt2=newText(centerX+clockRadius*Math.sin(Math.PI/3)-12,centerY-clockRadius*Math.cos(Math.PI/3)+5,"2");

Textt4=newText(centerX+clockRadius*Math.sin(Math.PI/3)-9,centerY+clockRadius*Math.cos(Math.PI/3)+1,"4");

Textt5=newText(centerX+clockRadius*Math.sin(Math.PI/6)-5,centerY+clockRadius*Math.cos(Math.PI/6)-3,"5");

Textt7=newText(centerX-clockRadius*Math.sin(Math.PI/6)+1,centerY+clockRadius*Math.cos(Math.PI/6)-4,"7");

Textt8=newText(centerX-clockRadius*Math.sin(Math.PI/3)+1,centerY+clockRadius*Math.cos(Math.PI/3)+0,"8");

Textt10=newText(centerX-clockRadius*Math.sin(Math.PI/3)+2,centerY-clockRadius*Math.cos(Math.PI/3)+6,"10");

Textt11=newText(centerX-clockRadius*Math.sin(Math.PI/6)-3,centerY-clockRadius*Math.cos(Math.PI/6)+12,"11");

//Drawsecondhand

doublesLength=clockRadius*0.8;

doublesecondX=centerX+sLength*

Math.sin(second*(2*Math.PI/60));

doublesecondY=centerY-sLength*

Math.cos(second*(2*Math.PI/60));

LinesLine=newLine(centerX,centerY,secondX,secondY);

sLine.setStroke(Color.RED);

//Drawminutehand

doublemLength=clockRadius*0.65;

doublexMinute=centerX+mLength*

Math.sin(minute*(2*Math.PI/60));

doubleminuteY=centerY-mLength*

Math.cos(minute*(2*Math.PI/60));

LinemLine=newLine(centerX,centerY,xMinute,minuteY);

mLine.setStroke(Color.BLUE);

//Drawhourhand

doublehLength=clockRadius*0.5;

doublehourX=centerX+hLength*

Math.sin((hour%12+minute/60.0)*(2*Math.PI/12));

doublehourY=centerY-hLength*

Math.cos((hour%12+minute/60.0)*(2*Math.PI/12));

LinehLine=newLine(centerX,centerY,hourX,hourY);

hLine.setStroke(Color.GREEN);

getChildren().clear();

getChildren().addAll(circle,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,sLine,mLine,hLine);

}

}

publicclasseeextendsApplication{

//Createaclockandalabel

publicClockPaneclock=newClockPane();

@Override//OverridethestartmethodintheApplicationclass

publicvoidstart(StageprimaryStage){

HBoxhBox=newHBox();

hBox.setSpacing(10);

hBox.setAlignment(Pos.CENTER);

//Placeclockandlabelinborderpane

BorderPanepane=newBorderPane();

pane.setCenter(clock);

pane.setBottom(hBox);

BorderPane.setAlignment(hBox,Pos.CENTER);

//Createasceneandplaceitinthestage

Scenescene=newScene(pane,250,250);

primaryStage.setTitle("runclock");//Setthestagetitle

primaryStage.setScene(scene);//Placethesceneinthestage

primaryStage.show();//Displaythestage

}

publicstaticvoidmain(String[]args){

launch(args);

}

}

 

实验二源代码

packageqw;

importjavafx.animation.KeyFrame;

importjavafx.animation.Timeline;

importjavafx.application.Application;

importjavafx.event.ActionEvent;

importjavafx.event.EventHandler;

importjavafx.scene.control.Button;

importjavafx.scene.layout.HBox;

importjavafx.geometry.Pos;

importjavafx.stage.Stage;

importjavafx.scene.Scene;

importjavafx.scene.layout.BorderPane;

importjava.util.Calendar;

importjava.util.GregorianCalendar;

importjavafx.scene.layout.Pane;

importjavafx.scene.paint.Color;

importjavafx.scene.shape.Circle;

importjavafx.scene.shape.Line;

importjavafx.scene.text.Text;

importjavafx.util.Duration;

classClockPaneextendsPane{

privateinthour;

privateintminute;

privateintsecond;

//Clockpane'swidthandheight

privatedoublew=250,h=250;

/**Constructadefaultclockwiththecurrenttime*/

publicClockPane(){

setCurrentTime();

}

/**Constructaclockwithspecifiedhour,minute,andsecond*/

publicClockPane(inthour,intminute,intsecond){

this.hour=hour;

this.minute=minute;

this.second=second;

paintClock();

}

/**Returnhour*/

publicintgetHour(){

returnhour;

}

/**Setanewhour*/

publicvoidsetHour(inthour){

this.hour=hour;

paintClock();

}

/**Returnminute*/

publicintgetMinute(){

returnminute;

}

/**Setanewminute*/

publicvoidsetMinute(intminute){

this.minute=minute;

paintClock();

}

/**Returnsecond*/

publicintgetSecond(){

returnsecond;

}

/**Setanewsecond*/

publicvoidsetSecond(intsecond){

this.second=second;

paintClock();

}

/**Returnclockpane'swidth*/

publicdoublegetW(){

returnw;

}

/**Setclockpane'swidth*/

publicvoids

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1