JAVA线程程序设计(小时钟)实验报告(附完整代码)

合集下载

JavaFX实现简易时钟效果

JavaFX实现简易时钟效果

JavaFX实现简易时钟效果本⽂实例为⼤家分享了JavaFX实现简易时钟效果的具体代码,供⼤家参考,具体内容如下⾸先要在⾯板中显⽰⼀个时钟,我们可以设计⼀个ClockPane类来显⽰⼀个时钟。

最终效果:若要绘制⼀个时钟,需要绘制⼀个圆并为秒钟、分钟和⼩时绘制三个指针。

为了画⼀个指针,需要确定⼀条直线的两端:⼀端是时钟的中央,位于(centerX,centerY);另外⼀端位于(endX,endY),由⼀下公式来确定:endX=centerX+handLength×sin(θ) endY=centerY-handLength×cos(θ)(其中θ是指针和竖直⽅向12点的夹⾓)因为⼀分钟有60秒,所以第2个指针的⾓度是:second×(2π/60)分钟的位置由分钟和秒钟来决定。

包含秒数的确切分钟数是minu+second/60。

例如,如时间是3分30秒,那么总的分钟数就是3.5。

由于⼀⼩时有60分钟,因此分针的⾓度是: (minute+second/60)×(2π/12)由于⼀个圆被分为12个⼩时,所以时针的⾓度是: (hour+minute/60+second/(60×60))×(2π/12)为了简化计算,在计算分针和时针⾓度的时候,可以忽略秒针,因为它们数字太⼩,基本可以忽略。

因此,秒针、分针以及时针的端点可以如下计算:secondX = centerX + secondHandLength × sin(second × (2π/60))secondY = centerY - secondHandLength × cos(second × (2π/60))minuteX = centerX + minuteHandLength × sin(minute × (2π/60))minuteY = centerY - minuteHandLength × cos(minute × (2π/60))hourX = centerX + hourHandLength × sin((hour+minute/60) × (2π/12))hourX = centerX + hourHandLength × sin((hour+minute/60) × (2π/12))这样就得到了ClockPane类的实现程序:package pany;import yout.Pane;import javafx.scene.paint.Color;import javafx.scene.shape.Circle;import javafx.scene.shape.Line;import javafx.scene.text.Text;import java.util.Calendar;import java.util.GregorianCalendar;public class ClockPane extends Pane{private int hour;private int minute;private int second;private double w=250,h=250;public ClockPane() {setCurrentTime();}public ClockPane(int hour,int minute,int second) {this.hour=hour;this.minute=minute;this.second=second;paintClock();}public int getHour() {return hour;}public void setHour(int hour) {this.hour=hour;paintClock();}public int getMinute() {return minute;}public void setMinute(int minute) {this.minute=minute;paintClock();}public int getSecond() {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();}protected void paintClock() {double clockRadius=Math.min(w,h)*0.8*0.5;double centerX=w/2;double centerY=h/2;Circle circle=new Circle(centerX,centerY,clockRadius);circle.setFill(Color.WHITE);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");double sLength=clockRadius*0.8;double scondX=centerX+sLength*Math.sin(second*(2*Math.PI/60)); double scondY=centerY-sLength*Math.cos(second*(2*Math.PI/60)); Line sline=new Line(centerX,centerY,scondX,scondY);sline.setStroke(Color.RED);double mLength=clockRadius*0.65;double minuteX=centerX+mLength*Math.sin(minute*(2*Math.PI/60)); double minuteY=centerY-mLength*Math.cos(minute*(2*Math.PI)/60); Line mline=new Line(centerX,centerY,minuteX,minuteY);mline.setStroke(Color.BLUE);double hLength=clockRadius*0.5;double hourX=centerX+hLength*Math.sin((hour%12+minute/60.0)*(2*Math.PI/12));double hourY=centerY-hLength*Math.cos((hour%12+minute/60)*(2*Math.PI/12));Line hline=new Line(centerX,centerY,hourX,hourY);hline.setStroke(Color.GREEN);getChildren().clear();getChildren().addAll(circle,t1,t2,t3,t4,sline,mline,hline);}}对程序的简要解读:①Java API的GregorianCalendar类可以使⽤它的⽆参构造⽅法来商城⼀个具有当前时间的Calendar实例。

JAVA课程设计 闹钟的设计与实现项目报告 附源代码

JAVA课程设计 闹钟的设计与实现项目报告 附源代码

Java 设计报告书课程名称:JAVA语言程序设计设计题目:闹钟的设计与实现院系:计算机科学与信息工程系学生姓名:学号:专业班级:指导教师:许研2010 年12 月28 日目录一、题目描述 (1)二、设计思路 (1)三、运行结果 (5)四、源代码 (6)五、总结 (10)六、参考文献 (10)闹钟的设计与实现一、题目描述:结合JAVA图形界面的知识设计一个闹钟二、设计思路1、设计要求:编写闹钟钟程序,要求画出时钟面板,动态的显示当前时间,可设定或解除闹钟时间,并提供闹钟服务相应的文字提示功能与可以自己选择闹钟提示声音提示功能,并在闹钟设定的输入框中有简单的排错功能。

2、算法基本描述:本程序先是在框架中新建了一个容器,然后用GridLayout类对面板进行划分,程序引入java.util.Date来显示当前时间,并用一个永真循环,来对当前时间显示的更新,引入java.io.File来实现对文件的读写操作,程序设计了一个选择按钮,用来选择文件,并且声明只能选择,WAU、MID的文件,引入用java.applet.Applet 来播放音乐文件,用getText()函数获取输入的闹钟设定时间,并永真循环和当前的时间进行对比,若相等则播放音乐,若不相等则显示离目标设定时间的差距。

3、设计思想与内容1、画出类的UML简图Clock类:Clock类中的变量ri, shi, fen, miao, dangqian, guanji: JLabe lqueding, dakai: JButtonmusic, RI, SHI, FEN, MIAO: JTextFieldh = 0, f = 0, m = 0, r = 0 :intFo, foo: booleansoumd1: public AudioClipClock类中的函数public clock()public static void main(String agrs[])public void run()2、各方法功能描述列表Clock类方法功能Main()执行main函数Clock()Clock类的构造函数,用于对时钟界面的初始化Run()用于对时钟的动态显示的执行,并判断是否设定了闹钟时间,若当前时间与设定的时间相等则播放选定的音乐3、主要模块算法描述(1)当前动态时间的显示的设计与实现。

利用JAVA实现一个时钟的小程序

利用JAVA实现一个时钟的小程序

JAVA课程项目报告项目题目:利用JAVA实现一个小时钟的程序专业班级:10软件工程利用JAVA实现一个时钟的小程序1.软件开发的需求分析在当今的信息时代,时钟已经成为人们生活中必不可少的应用工具,Java语言是当今流行的网络编程语言,它具有面向对象、与平台无关、安全、多线程等特点。

使用Java 语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的、嵌入式设备进行应用程序的开发。

面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。

为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼我们熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。

此次课程设计的题目为简单的小时钟程序设计,通过做巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。

使我们通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。

2.具体实现2.1设计思路Java是一种简单的,面向对象的,分布式的,解释的,键壮的,安全的,结构中立的,可移植的,性能很优异的,多线程的,动态的语言。

Java去掉了C++语言的许多功能,让Java的语言功能很精炼,并增加了一些很有用的功能,如自动收集碎片。

这将减少平常出错的50%。

而且,Java很小,整个解释器只需215K的RAM。

因此运用JAVA程序编写小时钟程序,实现简单显示时间的功能。

本次课程设计做的是Java简单小时钟,它是图形界面、线程、流与文件等技术的综合应用,其界面主要采用了java.awt包,javax.swing包等。

程序实现了小时钟的基本功能。

2.2设计方法在设计简单小时钟时,需要编写5个Java源文件:Server.java、Objecting.java、LogIn.java、ClientUser.java、Client.java。

java实验一:写一个桌面时钟

java实验一:写一个桌面时钟

java实验⼀:写⼀个桌⾯时钟⼀共有三个类:这个是第⼀个,主函数类:public class Programe extends JFrame {/** 四个部分: 1.画出窗体和⾯板 2.画出指针 3.时间转换的算法 4.让指针动起来*/public static void main(String[] string) {Programe frame = new Programe();// 创建窗体对象frame.setVisible(true);// 设置窗体可见,没有该语句,窗体将不可见,此语句必须有,否则没有界⾯就没有意义}public Programe() {setUndecorated(false);// 打开窗体修饰setAlwaysOnTop(true);// 窗体置顶getContentPane().setLayout(new BorderLayout()); // 在窗体的基础上加⼊⾯板:Panel ⽽后就可以在⾯板上进⾏其他操作 // 指定的组件之间的⽔平间距构造⼀个边界布局setBounds(100, 30, 217, 257);// ⽤于设置窗⼝尺⼨和位置;ClockPaint clockPaint = new ClockPaint();// 创建时钟⾯板getContentPane().add(clockPaint);new Thread() {// 继承Thread类创建线程,更新时钟⾯板界⾯@Overridepublic void run() {// 重写run⽅法try {while (true) {sleep(1000);// 休眠1秒clockPaint.repaint();// 重新绘制时钟⾯板界⾯}} catch (InterruptedException e) {e.printStackTrace();// 在命令⾏打印异常信息在程序中出错的位置及原因。

}}}.start();}}这个是第⼆个,画时钟的类:package clock;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Graphics2D;import javax.swing.ImageIcon;import javax.swing.JPanel;public class ClockPaint extends JPanel {private static final BasicStroke H = new BasicStroke(4);// 指针粗细private static final BasicStroke M = new BasicStroke(3);private static final BasicStroke S = new BasicStroke(2);private final static int secLen = 60; // 指针长度private final static int minuesLen = 55;private final static int hoursLen = 36;ImageIcon background;// 背景private int X;// 中⼼坐标private int Y;public ClockPaint() {background = new ImageIcon(getClass().getResource("时钟.jpg"));// 加载图⽚int Width = background.getIconWidth();// 获取图⽚宽度X = Width / 2 + 2;// 获取图⽚中间坐标int Height = background.getIconHeight();// 获取图⽚长度Y = Height / 2 - 8;// 获取图⽚中间坐标setPreferredSize(new Dimension(Width, Height));// 设置最好的⼤⼩(固定⽤法)}public void paint(Graphics g) {Graphics2D g2 = (Graphics2D) g;g2.drawImage(background.getImage(), 0, 0, this);ClockData data = new ClockData(secLen, minuesLen, hoursLen);// 绘制时针g2.setStroke(H);// 设置时针的宽度g2.setColor(Color.RED);// 设置时针的颜⾊g2.drawLine(X, Y, X + data.hX, Y - data.hY);// 绘制时针// 绘制分针g2.setStroke(M);// 设置分针的宽度g2.setColor(Color.orange);// 设置时针的颜⾊g2.drawLine(X, Y, X + data.mX, Y - data.mY);// 绘制分针// 绘制秒针g2.setStroke(S);// 设置秒针的宽度g2.setColor(Color.GREEN);// 设置时针的颜⾊g2.drawLine(X, Y, X + data.sX, Y - data.sY);// 绘制秒针// 绘制中⼼圆g2.setColor(Color.BLUE);g2.fillOval(X - 5, Y - 5, 10, 10);}}这个是第三个,获取时钟的数据:package clock;import static java.util.Calendar.HOUR;import static java.util.Calendar.MINUTE;import static java.util.Calendar.SECOND;import java.util.Calendar;public class ClockData {public int sX, sY, mX, mY, hX, hY;public ClockData(int secLen, int minuesLen, int hoursLen) {Calendar calendar = Calendar.getInstance();// 获取⽇历对象int sec = calendar.get(SECOND);// 获取秒值int minutes = calendar.get(MINUTE);// 获取分值int hours = calendar.get(HOUR);// 获取时值// 计算⾓度int hAngle = hours * 360 / 12 + (minutes / 2) ;// 时针⾓度(每分钟时针偏移⾓度)int sAngle = sec * 6; // 秒针⾓度int mAngle = minutes * 6 + (sec / 10);// 分针⾓度// 计算秒针、分针、时针指向的坐标sX = (int) (secLen * Math.sin(Math.toRadians(sAngle)));// 秒针指向点的X坐标(将⾓度转换为弧度) sY = (int) (secLen * Math.cos(Math.toRadians(sAngle))); // 秒针指向点的Y坐标mX = (int) (minuesLen * Math.sin(Math.toRadians(mAngle))); // 分针指向点的X坐标mY = (int) (minuesLen * Math.cos(Math.toRadians(mAngle))); // 分针指向点的Y坐标hX = (int) (hoursLen * Math.sin(Math.toRadians(hAngle))); // 时针指向点的X坐标hY = (int) (hoursLen * Math.cos(Math.toRadians(hAngle))); // 时针指向点的Y坐标}}以上参考了其他⼤佬的代码,等我找到原地址再补上:D做了部分修改,加了部分注释,java⼩⽩还请客官您多多包含呀!。

java简易电子时钟代码Word版

java简易电子时钟代码Word版

import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import java.text.SimpleDateFormat;public class ClockJFrame extends JFrame{private Date now=new Date();Panel buttons=new Panel();Button button_start=new Button("启动");Button button_interrupt=new Button("停止");Clock label=new Clock();public ClockJFrame() //构造方法{super("电子时钟");this.setBounds(300,240,300,120);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setLayout(new BorderLayout());this.getContentPane().add("North",label);//初始化一个容器,用来在容器上添加一个标签this.getContentPane().add("South",buttons);buttons.setLayout(new FlowLayout());buttons.add(button_start);buttons.add(button_interrupt);setVisible(true);}private class Clock extends Label implements ActionListener,Runnable{ private Thread clocker=null;private Date now=new Date();public Clock(){button_start.addActionListener(this);button_interrupt.addActionListener(this);SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");//可以方便地修改日期格式String t = dateFormat.format( now );this.setText(t);}public void start(){if(clocker==null){clocker=new Thread(this);clocker.start();}}public void stop(){clocker=null;}public void run(){Thread currentThread=Thread.currentThread();while(clocker==currentThread){now=new Date();SimpleDateFormat dateFormat = newSimpleDateFormat("HH:mm:ss");//可以方便地修改日期格式String t = dateFormat.format( now );this.setText(t);try{clocker.sleep(1000);}catch(InterruptedException ie){JOptionPane.showMessageDialog(this,"Thread error:+ie");}}}public void actionPerformed(ActionEvent e){if (e.getSource()==button_start) {clocker = new Thread(this); //重新创建一个线程对象clocker.start();button_start.setEnabled(false);button_interrupt.setEnabled(true);}if (e.getSource()==button_interrupt) //单击中断按钮时{clocker.stop(); //设置当前线程对象停止标记button_start.setEnabled(true);button_interrupt.setEnabled(false);}}}//内部类结束public static void main(String[] args) {ClockJFrame time=new ClockJFrame();}}运行结果:。

JAVA实验报告一(运用JavaFx画时钟)-推荐下载

JAVA实验报告一(运用JavaFx画时钟)-推荐下载

一 概述
1. 课程设计的目的 1、 设计一个带有指针、数字时钟,能方便我们的使用和操作,
为我们以后的使用创造一个良好的平台。了解和掌握 JavaFx
基本概念和用法。
2、 把自己所学的理论知识运用到实际操作中去,以此来发现自
己的不足,及时的改正。在实际的操作中学习及运用还没有
学过的知识。最后在调试与测试的过程还可以提升自己的改
错能力也是自己经验的积累。
2. 课程设计的要求
编写一个模拟时钟程序,此程序在屏幕左方有一指针式钟面,右方有两个 矩形框,上面以数字方式显示日期和时间,该时间应与指针显示的时间一致, 下方的矩形框作为秒表。用菜单选项或按钮设置时间和秒表。时间不必与机器 系统时间相同,只要可任意设置即可。
在设计的过程中,需要用到 awt 组件和 Swing 容器与组件,布局管理器, 事件处理,绘制图形,还运用到了类的继承,事件监听器和线程。还有自己还 没有掌握的 2D 绘制图形,以及绘制各指针及之间的关系。为了完成自己的设 计,必须 API、教材以及相关的资料来解决这些尚未掌握的问题。
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电通,力1根保过据护管生高线产中0不工资仅艺料可高试以中卷解资配决料置吊试技顶卷术层要是配求指置,机不对组规电在范气进高设行中备继资进电料行保试空护卷载高问与中题带资2负料2,荷试而下卷且高总可中体保资配障料置2试时32卷,3各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并25工且52作尽22下可护都能1关可地于以缩管正小路常故高工障中作高资;中料对资试于料卷继试连电卷接保破管护坏口进范处行围理整,高核或中对者资定对料值某试,些卷审异弯核常扁与高度校中固对资定图料盒纸试位,卷置编工.写况保复进护杂行层设自防备动腐与处跨装理接置,地高尤线中其弯资要曲料避半试免径卷错标调误高试高等方中,案资要,料求编试技5写、卷术重电保交要气护底设设装。备备置管4高调、动线中试电作敷资高气,设料中课并技3试资件且、术卷料中拒管试试调绝路包验卷试动敷含方技作设线案术,技槽以来术、及避管系免架统不等启必多动要项方高方案中式;资,对料为整试解套卷决启突高动然中过停语程机文中。电高因气中此课资,件料电中试力管卷高壁电中薄气资、设料接备试口进卷不行保严调护等试装问工置题作调,并试合且技理进术利行,用过要管关求线运电敷行力设高保技中护术资装。料置线试做缆卷到敷技准设术确原指灵则导活:。。在对对分于于线调差盒试动处过保,程护当中装不高置同中高电资中压料资回试料路卷试交技卷叉术调时问试,题技应,术采作是用为指金调发属试电隔人机板员一进,变行需压隔要器开在组处事在理前发;掌生同握内一图部线纸故槽资障内料时,、,强设需电备要回制进路造行须厂外同家部时出电切具源断高高习中中题资资电料料源试试,卷卷线试切缆验除敷报从设告而完与采毕相用,关高要技中进术资行资料检料试查,卷和并主检且要测了保处解护理现装。场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

java课程设计小时钟

java课程设计小时钟

import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.awt.geom.*;import java.util.Date;class Clock1 extends Canvas implements ActionListener{ Date date ;javax.swing.Timer secondTime;int hour,munite,second;Line2D secondLine,muniteLine,hourLine;int a,b,c;double pointSX[]=new double[60],pointSY[]=new double[60],pointMX[]=new double[60],pointMY[]=new double[60],pointHX[]=new double[60],pointHY[]=new double[60];Clock1(){secondTime=new javax.swing.Timer(1000,this);pointSX[0]=0;pointSY[0]=-100;pointMX[0]=0;pointMY[0]=-90;pointHX[0]=0;pointHY[0]=-70;double angle=6*Math.PI/180;for(int i=0;i<59;i++){pointSX[i+1]=pointSX[i]*Math.cos(angle)-Math.sin(angle)*pointSY[i]; pointSY[i+1]=pointSY[i]*Math.cos(angle)+pointSX[i]*Math.sin(angle); pointMX[i+1]=pointMX[i]*Math.cos(angle)-Math.sin(angle)*pointMY[i]; pointMY[i+1]=pointMY[i]*Math.cos(angle)+pointMX[i]*Math.sin(angle); pointHX[i+1]=pointHX[i]*Math.cos(angle)-Math.sin(angle)*pointHY[i];pointHY[i+1]=pointHY[i]*Math.cos(angle)+pointHX[i]*Math.sin(angle); }for(int i=0;i<60;i++){pointSX[i]=pointSX[i]+120;pointSY[i]=pointSY[i]+120;pointMX[i]=pointMX[i]+120;pointMY[i]=pointMY[i]+120;pointHX[i]=pointHX[i]+120;pointHY[i]=pointHY[i]+120;}secondLine=new Line2D.Double(0,0,0,0);muniteLine=new Line2D.Double(0,0,0,0);hourLine=new Line2D.Double(0,0,0,0);secondTime.start();}public void paint(Graphics g){for(int i=0;i<60;i++){int m=(int)pointSX[i];int n=(int)pointSY[i];if(i%5==0){g.setColor(Color.red);g.fillOval(m-4,n-4,8,8);}else{g.setColor(Color.blue);g.fillOval(m-2,n-2,4,4);}}g.fillOval(115,115,10,10);Graphics2D g_2d=(Graphics2D)g;g_2d.setColor(Color.red);g_2d.draw(secondLine);BasicStroke bs=newBasicStroke(3f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);g_2d.setStroke(bs);g_2d.setColor(Color.blue);g_2d.draw(muniteLine);bs=newBasicStroke(6f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);g_2d.setStroke(bs);g_2d.setColor(Color.black);g_2d.draw(hourLine);}public void actionPerformed(ActionEvent e){if(e.getSource()==secondTime){date=new Date();String s=date.toString();hour=Integer.parseInt(s.substring(11,13));munite=Integer.parseInt(s.substring(11,13));second=Integer.parseInt(s.substring(11,13));int h=hour%12;a=second;b=munite;c=h*5+munite/12;secondLine.setLine(120,120,(int)pointSX[a],(int)pointSY[a]);secondLine.setLine(120,120,(int)pointMX[b],(int)pointMY[b]);secondLine.setLine(120,120,(int)pointHX[c],(int)pointHY[c]);repaint();}}}public class Clock{public static void main(String args[]){javax.swing.JFrame win=new javax.swing.JFrame();win.setSize(400,400);win.add(new Clock1());win.setVisible(true);}}。

java小闹钟

java小闹钟

课程设计(综合实验)报告( 2011 -- 20112 年度第 1 学期)名称:课程或实验名称题目:迷你闹钟的设计与实现院系:经济与管理学院班级:信管1001班学号:1101300107学生姓名:李小鹏指导教师:梁春燕设计周数:一周成绩:日期:2012 年01 月06 日一、课程设计(综合实验)的目的与要求➢设计目的:通过迷你闹钟的设计和实现,考察学生对JA V A语言的掌握情况,并提高学生对图形用户界面的设计和编程能力。

➢设计要求:1.显示时间功能:迷你闹钟可以即时显示当前时间。

2.闹钟功能:能够根据用户设置的时间来提醒用户,可以用声音或者文字进行提醒。

3.时间设置功能:提供菜单来设置时钟的当前时间,和闹钟的提醒时间。

4.界面设计:可模拟真实钟表界面,也可以用数字界面显示。

要求美观、实用和个性化。

二、设计(实验)正文1.设计迷你闹钟的方法1.1利用CardLayout布局实现时间界面和设置闹钟界面的转换1.2在时间界面设置label1和label2实现当前时间的数字化显示,并利用Date类和SimpleDateFormate类实现界面显示“上午好”或“下午好”。

在label1上绘制模拟钟表实现模拟钟表的界面。

1.3在闹钟设置面板上添加当前时间,通过文本框和标签设置需要设置的闹钟的时、分、秒。

设置列表框提供闹钟的音乐以供选择。

设置开关按钮决定闹钟的开始和结束2.遇到问题2. 1 设置迷你闹钟的界面化时遇到问题通过参考已有的程序加以解决2. 2 设置“闹铃时间”、“开关按钮”、“背景音乐列表框”时,事件的触发和监控遇到问题,经过反复修改调试得到解决。

2. 3 闹铃背景音乐格式设置遇到问题,经过调试和格式转换解决3.待解决问题闹钟的思想是“北京时间”,所以背景音乐中有《天涯共此时》音乐,界面上有北京时间等标识本来想在界面上添加一幅具有北京特色的图片做背景,但反复尝试,遗憾的是均未能成功,添加的背景图片总被上层面板遮挡,希望老师给以指导。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

线程程序设计
一、课题内容和要求
内容:设计和编写一个编写一个指针式时钟程序,应用线程实现时钟的走动。

要求:本实验旨在通过实验,培养学生将JAVA 线程的相关知识点(包括线程调度,线程同步等)有机结合并加以综合应用,在实验中设计多线程程序的能力。

二、设计思路分析
class Clock:一个指针式时钟的主类
class Layout: 添加窗口和时钟组件
class ClockPaint:定义时钟组件
三、概要设计
public class Clock extends JFrame {
public static void main(String[] s) ;
}
class Layout extends JFrame {
public Layout();
}
class ClockPaint extends JPanel implements Runnable {
int x, y, r;
int h, m, s;
double rad = Math.PI / 180;
public ClockPaint(int x, int y, int r);
public void paint(Graphics g);
public void run();
}
时钟的绘制:
运行时钟:
四、详细设计
import java.awt.*;
import javax.swing.*;
import java.util.*;
public class Clock extends JFrame {
public static void main(String[] s) {
new Layout();
}
}
class Layout extends JFrame {// 添加窗口和时钟组件public Layout() {
ClockPaint cp = new ClockPaint(20, 20, 70);
add(cp);
setBounds(260, 120, 200, 200);
setResizable(false);
this.setTitle("指针式时钟");
this.setVisible(true);
}
}
class ClockPaint extends JPanel implements Runnable {// 定义时钟组件
int x, y, r;// 时钟的位置坐标和半径
int h, m, s;// 小时,分钟,秒
double rad = Math.PI / 180;// 定义弧度
public ClockPaint(int x, int y, int r) {// 构造函数
this.x = x;
this.y = y;
this.r = r;
Calendar now = Calendar.getInstance();// 初始化日历对象
s = now.get(Calendar.SECOND) * 6;// 获得初始秒转换成度数
m = now.get(Calendar.MINUTE) * 6;// 获得初始分钟转换成度数
h = (now.get(Calendar.HOUR_OF_DAY) - 12) * 30
+ now.get(Calendar.MINUTE) * 6 / 12;// 获得初始小时转换成度数加分钟实现连贯
Thread t = new Thread(this);// 新建线程
t.start();// 启动线程
}
public void paint(Graphics g) {// 绘制时钟
g.setColor(Color.BLACK);// 画背景
g.fillRect(0, 0, r * 3, r * 3);
g.setColor(Color.WHITE);// 画圆
g.drawOval(x, y, r * 2, r * 2);
int d = 0;// 每6度画一个小点
int x1, y1, x2, y2;
for (int i = 0; i < 60; i++) {
x1 = (int) ((r - 2) * Math.sin(rad * d));
y1 = (int) ((r - 2) * Math.cos(rad * d));
g.drawString(".", x + r + x1 - 1, x + r - y1 + 1);
d += 6;
}
d = 30;// 从30度开始每30度画一个数字和一线
for (int i = 1; i <= 12; i++) {
x1 = (int) ((r - 14) * Math.sin(rad * d));
y1 = (int) ((r - 14) * Math.cos(rad * d));
g.drawString(i + "", x + r + x1 - 4, x + r - y1 + 5);
x1 = (int) ((r - 6) * Math.sin(rad * d));
y1 = (int) ((r - 6) * Math.cos(rad * d));
x2 = (int) ((r - 2) * Math.sin(rad * d));
y2 = (int) ((r - 2) * Math.cos(rad * d));
g.drawLine(x + r + x2, y + r - y2, x + r + x1, y + r - y1);
d += 30;
}
g.setColor(Color.RED);// 按时间画秒针
x1 = (int) ((0.8 * r) * Math.sin(rad * s));
y1 = (int) ((0.8 * r) * Math.cos(rad * s));
g.drawLine(x + r, y + r, x + r + x1, y + r - y1);
g.setColor(Color.BLUE);// 按时间画分针
x1 = (int) ((0.6 * r) * Math.sin(rad * m));
y1 = (int) ((0.6 * r) * Math.cos(rad * m));
g.drawLine(x + r, y + r, x + r + x1, y + r - y1);
g.setColor(Color.YELLOW);// 按时间画时针
x1 = (int) ((0.4 * r) * Math.sin(rad * h));
y1 = (int) ((0.4 * r) * Math.cos(rad * h));
g.drawLine(x + r, y + r, x + r + x1, y + r - y1);
g.setColor(Color.GREEN);// 显示时间
Calendar now1 = Calendar.getInstance();
g.drawString(
now1.get(Calendar.HOUR_OF_DAY) + ":"
+ now1.get(Calendar.MINUTE) + ":"
+ now1.get(Calendar.SECOND), 0, 10); }
public void run() {// 运行时钟
while (true) {
try {
Thread.sleep(1000);// 中断一秒后重新运行} catch (Exception ex) {
System.out.println(ex);
}
s += 6;// 秒针走6度
if (s >= 360) {// 秒针走完一分钟后重置
s = 0;
m += 6;
if (m == 72 || m == 144 || m == 216 || m == 288) {// 分针走完5分钟后重置
h += 6;
}
if (m >= 360) {// 分针走完一小时后重置
m = 0;
h += 6;
}
if (h >= 360) {// 时针走完12小时后重置
h = 0;
}
}
this.repaint();// 重新绘制时钟
}
}
}
五、测试数据及其结果分析
1时钟界面:
2结果:输出正常。

六、调试过程中的问题
一开始没有考虑分钟走五分钟时针应走一小格,在参考机械时钟的设计后,实现了时钟的连贯走动。

七、程序设计总结
1、通过该实验掌握了应用线程实现时钟的走动的方法。

2、学会了编写时钟的算法、多线程的设计与使用。

3、在逐步地优化和调试中实现了一个较切合实际的时钟界面。

相关文档
最新文档