当前位置:文档之家› java第二次实验报告

java第二次实验报告

java实验报告实验题目运用JavaFx实现时钟动画学生姓名指导教师学院专业班级完成时间2014年12目录一、实验目的 (3)二、实验开发环境和工具 (3)三、实验内容 (3)四.实际简要描述: (3)五.程序清单 (4)六.结果分析 (10)七.调试报告 (11)八.实验心得 (11)一、实验目的1.了解和掌握JavaFx动画基本概念和相关用法二、实验开发环境和工具可以在Linux或者Windows操作系统上搭建开发环境,可使用集成开发环境Eclipse,使用Java语言,工具包使用JDK1.8。

三、实验内容基于JavaFx画出如下所示可动态变化的时钟。

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

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

四.实际简要描述:1.新建一个动态时针EventHandler<ActionEvent>eventHandler = e -> {clock.setCurrentTime(); // 设置时钟时间};2.建立一个动画使时钟走起来Timeline animation = new Timeline(newKeyFrame(lis(1000), eventHandler));animation.setCycleCount(Timeline.INDEFINITE);animation.play(); // 开始动画3.建立按钮HBoxhbox=new HBox();//新建HBOX布局hbox.setSpacing(20);hbox.setLayoutX(310);hbox.setLayoutY(520);Start = new Button("Start");//建立start按钮Start.setPrefSize(80, 40);Stop = new Button("Stop");//建立stop按钮Stop.setPrefSize(80, 40);hbox.getChildren().addAll(Start,Stop);//将按钮加入HBOX getChildren().add(hbox);五.程序清单importjavafx.application.Application;importjava.util.Calendar;importjava.util.GregorianCalendar;yout.Pane;importjavafx.scene.paint.Color;importjavafx.scene.shape.Circle;importjavafx.scene.shape.Line;importjavafx.scene.text.Text;importjavafx.application.Application;importjavafx.stage.Stage;importjavafx.animation.KeyFrame;importjavafx.animation.Timeline;importjavafx.event.ActionEvent;importjavafx.event.EventHandler;importjavafx.scene.Scene;importjavafx.util.Duration;classClockPane extends Pane {privateint hour;privateint minute;privateint second;private double w = 250, h = 250;//设置pane的长宽public ClockPane() {//每次打开时,定到当前时间setCurrentTime();}public ClockPane(int hour, int minute, int second) {//用特殊时间初始化时钟this.hour = hour;this.minute = minute;this.second = second;paintClock();}public intgetHour() {//返回小时return hour;}public void setHour(int hour) {//更新小时this.hour = hour;paintClock();}public intgetMinute() {//返回分钟return minute;}public void setMinute(int minute) {//更新分钟this.minute = minute;paintClock();}public intgetSecond() {//返回秒return second;}public void setSecond(int second) {//设置秒this.second = second;paintClock();}public double getW() {return w;}public void setW(double w) {this.w = w;paintClock();}public double getH() {return h;}public void setH(double h) {this.h = h;paintClock();}public void setCurrentTime() {//为时钟建立当前时间Calendar calendar = new GregorianCalendar();this.hour = calendar.get(Calendar.HOUR_OF_DAY);this.minute = calendar.get(Calendar.MINUTE);this.second = calendar.get(Calendar.SECOND);paintClock(); // 建立时间后重新画一个时钟}private void paintClock() {//初始化时钟参数doubleclockRadius = Math.min(w, h) * 1.0 * 0.6;doublecenterX = w / 2;doublecenterY = h / 2;//开始画圆Circle circle = new Circle(centerX, centerY, clockRadius); circle.setFill(Color.GREEN);circle.setStroke(Color.BLACK);Text t1 = new Text(centerX - 5, centerY - clockRadius + 12, "12");Text t2 = new Text(centerX - clockRadius + 3, centerY + 5, "9");Text t3 = new Text(centerX + clockRadius - 10, centerY + 3, "3");Text t4 = new Text(centerX - 3, centerY + clockRadius - 3, "6");//开始画秒针doublesLength = clockRadius * 0.8;doublesecondX = centerX + sLength *Math.sin(second * (2 * Math.PI / 60));doublesecondY = centerY - sLength *Math.cos(second * (2 * Math.PI / 60));Line sLine = new Line(centerX, centerY, secondX, secondY); sLine.setStroke(Color.YELLOW);// 开始画分针doublemLength = clockRadius * 0.65;doublexMinute = centerX + mLength *Math.sin(minute * (2 * Math.PI / 60));doubleminuteY = centerY - mLength *Math.cos(minute * (2 * Math.PI / 60));Line mLine = new Line(centerX, centerY, xMinute, minuteY); mLine.setStroke(Color.BLUE);// 画时针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));Line hLine = new Line(centerX, centerY, hourX, hourY); hLine.setStroke(Color.PINK);getChildren().clear();getChildren().addAll(circle, t1, t2, t3, t4, sLine, mLine, hLine);}}public class ClockAnimation extends Application {// 重载start方法public void start(Stage primaryStage) {ClockPane clock = new ClockPane(); // 新建一个时钟// 新建一个动态时针EventHandler<ActionEvent>eventHandler = e -> {clock.setCurrentTime(); // 设置时钟时间};// 建立一个动画使时钟走起来Timeline animation = new Timeline(newKeyFrame(lis(1000), eventHandler));animation.setCycleCount(Timeline.INDEFINITE);animation.play(); // 开始动画// 新建场景Scene scene = new Scene(clock, 250, 250);primaryStage.setTitle("***DynamiDisplayTime***"); // 设置舞台标题primaryStage.setScene(scene); // 将场景放在舞台中primaryStage.show(); //显示舞台}public static void main(String[] args) {launch(args);}}六.结果分析初始的设计中,忽略了start和stop两个按钮,这涉及了动态的指针走动,输出的效果如下:后来,加进去了start,stop这两个按钮后,在建立这两个按钮对时钟控制的程序时,出现了问题,起先不理解事件驱动编程,后来看了也不是很懂,于是,建立了两个按钮。

相关主题