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