南邮JAVA程序设计实验4 线程程序设计(指针式时钟)

南邮JAVA程序设计实验4  线程程序设计(指针式时钟)

实验目的:

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

实验内容:

设计和编写一个编写一个指针式时钟程序,应用线程实现时钟的走动。

实验设计:

主要是控制时针分针秒针的转动度数,这个直接通过坐标的三角函数值求得,线程方面,隔一秒休眠一下,然后通过时分秒的换算关系来改变三个对应指示针在时钟上的位置

实验代码:

import java.awt.*;
import javax.swing.*;
import java.util.*;

public class JavaClock extends JFrame {
    public JavaClock() {
        ClockPaint cp = new ClockPaint(20, 20, 70);
        this.add(cp);
        this.setSize(200, 200);
        this.setLocation(260, 120);
        this.setTitle("指针时钟");
        this.setVisible(true);
        this.setResizable(false);
    }
    public static void main(String[] s) {
        new JavaClock();
    }
}

class ClockPaint extends JPanel implements Runnable {
    int x, y, r;
    int hour, minute, second; //时,分,秒
    final double rad = Math.PI / 180;
    public ClockPaint(int x, int y, int r) {
        this.x = x;
        this.y = y;
        this.r = r;
        Calendar now = new GregorianCalendar();
        //获得时间转换成度数
        second = now.get(Calendar.SECOND) * 6;
        minute = now.get(Calendar.MINUTE) * 6;
        hour = (now.get(Calendar.HOUR_OF_DAY) - 12) * 30 + now.get(Calendar.MINUTE) / 12 * 6;
        Thread t = new Thread(this);
        t.start();
    }

    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, r * 3, r * 3);
        g.setColor(Color.BLACK);
        g.drawOval(x, y, r * 2, r * 2);

        //秒针
        g.setColor(Color.GREEN);
        int x1 = (int)((r - 10) * Math.sin(rad * second));
        int y1 = (int)((r - 10) * Math.cos(rad * second));
        g.drawLine(x + r, y + r, x + r + x1, y + r - y1);

        //分针
        g.setColor(Color.BLUE);
        x1 = (int)((r - r / 2.5) * Math.sin(rad * minute));
        y1 = (int)((r - r / 2.5) * Math.cos(rad * minute));
        g.drawLine(x + r, y + r, x + r + x1, y + r - y1);

        //时针
        g.setColor(Color.RED);
        x1 = (int)((r - r / 1.5) * Math.sin(rad * hour));
        y1 = (int)((r - r / 1.5) * Math.cos(rad * hour));
        g.drawLine(x + r, y + r, x + r + x1, y + r - y1);

        //数字
        g.setColor(Color.BLACK);
        int d = 28;
        for (int i = 1; i <= 12; i++) {
            x1 = (int)((r - 10) * Math.sin(rad * d));
            y1 = (int)((r - 10) * Math.cos(rad * d));
            g.drawString(i + "", x + r + x1 - 4, x + r - y1 + 5);
            d += 30;
        }

        //刻度线
        d = 0;
        for (int i = 0; i < 60; i++) {
            int len = 0; //控制每个分割点的长度,数字点上的分割线长一点
            if(d % 30 == 0) {
                len = 5;
            }
            else {
                len = 2;
            }
            for (int j = 1; j <= len; j++)
            {
                x1 = (int)((r - j) * Math.sin(rad * d));
                y1 = (int)((r - j) * Math.cos(rad * d));
                g.drawString(".", x + r + x1 - 1, x + r - y1 + 1);
            }
            d += 6;
        }
    }
    public void run() {
        while (true) {
            try {
                Thread.sleep(1000); //休眠一秒
            }
            catch (Exception ex) {

            }
            second += 6; //每一秒,秒针动6度
            if (second == 60 || second == 120 || second == 180 || second == 240 || second == 300) {
                minute += 1;  //每10秒,分针动1度
            }
            //大于一分钟,分针和时针开始出现改变
            if (second == 360) {
                second = 0;
                minute += 1;
                if (minute == 72 || minute == 144 || minute == 216 || minute == 288) {
                    hour += 6;
                }
                if (minute >= 360) {
                    minute = 0;
                    hour += 6;
                }
                if (hour >= 360) {
                    hour = 0;
                }
            }
            this.repaint();
        }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-16 17:42:27

南邮JAVA程序设计实验4 线程程序设计(指针式时钟)的相关文章

南邮JAVA程序设计实验1 综合图形界面程序设计

南邮JAVA程序设计实验1  综合图形界面程序设计 实验目的: 学习和理解JAVA SWING中的容器,部件,布局管理器和部件事件处理方法.通过编写和调试程序,掌握JAVA图形界面程序设计的基本方法. 实验内容: 设计和编写一个用于将人民币转换为等值的美元的程序,界面要求可以输入人民币的金额并可以得到转换后的结果.(每100美元等值买入人民币数:619.72) 实验代码: import java.awt.*; import java.awt.event.*; import java.math.*

南邮JAVA程序设计实验3 流处理程序设计

南邮JAVA程序设计实验3  流处理程序设计 实验目的: 要求学生能在学习和理解课堂学习内容中JAVA流编程理论的基础上,学习并逐步掌握JAVA流程序的编写和调试,学习根据处理需求对不同流的正确选择使用和组合使用方法. 实验内容: 设计和编写一个程序从键盘读入一行字符串,将其写入一个文本文件中,再编写另一个程序从文本文件中读入字符串并在命令行窗口显示出来. 实验程序1: 用数据的基本的读入Scanner读入一行,用缓冲流写入文件. import java.io.*; import java.ut

南邮JAVA程序设计实验2 小应用程序Applet设计

实验目的: 要求学生能在学习和理解课堂学习内容中JAVA小应用程序的基础上,通过实验,培养学生将JAVA小应用程序相关知识点(包括JAVA Applet和低级事件处理模型)有机结合,设计基于WEB浏览器的小应用程序的能力. 实验内容: 设计和编写一个可以用鼠标操作的Applet小应用程序和相应的HTML页面,观察Applet的执行过程,测试程序鼠标用户交互操作的效果. 实验代码: JAVA: import java.applet.*; import java.awt.*; import java

C程序设计实验报告

C程序设计实验报告 C程序设计实验报告  试验项目:基本的程序语句实验.程序的简单算法设计实验  姓名:陈建清   实验地点:物联网工程实验室   实验时间:2019.03.19 一.实验目的与要求   1.了解字符在计算机中以ASCII码方式表示,了解字符的类型.字长其数的表示范围.  2.掌握C语言数据类型,熟练掌握变量定义:  3.使用scanf()输入变量的值,使用printf()输出变量:  4.掌握运算符与表达式的使用方法及其优先级和结合性规律. 5.巩固对算法概念的理解,掌握运算符

Python程序设计实验二

Python程序设计实验二 Python程序设计实验安徽工程大学   班级:物流192    姓名:陆园林    学号:3190505223 日期:2020年3月22日       指导教师:修宇 实验二 顺序结构程序设计(验证性实验) [实验目的] (1)掌握数据的输入输出的方法: (2)熟悉顺序结构程序中语句的执行过程: (3)掌握顺序结构程序的设计方法. [实验条件]   PC机或者远程编程环境   [实验内容] 1.完成三个编程题.( python123) (1)计算圆面积的计算 S 问

“亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 (部分题解)

“亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 F 自动售货机 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte总提交 : 60            测试通过 : 13  题目描述 教学楼有一台奇怪的自动售货机,它只售卖一种饮料,单价5元,并且只收5元.10元面值的货币,但是同学们都很喜欢喝.这个售货机里没有多余的找零,也就是说如果一个持有10元的同学第一个购买,则他不能获得5元找零,但是如果在他之前有一个持有5

Java程序设计实验 实验五

课程:Java程序设计实验   班级:1353  姓名:符余佳源  学号:20135321 成绩:                           指导教师:娄嘉鹏      实验日期:2015.6.9 实验密级:无            预习程度:                   实验时间:15:30~18:00 仪器组次:  21                    必修/选修: 选修                  实验序号:5 实验名称:TCP传输及加解密 产品托管地址:ht

Java程序设计 实验二 Java面向对象程序设计

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计 班级:1353  姓名:李海空  学号:20135329 成绩:             指导教师:娄嘉鹏      实验日期:2015.5.7 实验密级:         预习程度:         实验时间: 仪器组次:          必修/选修:            实验序号: 实验名称:       Java面向对象程序设计 实验目的与要求:实验内容 1. 初步掌握单元测试和TDD 2.

20145326《Java程序设计》实验二Java面向对象程序设计实验报告

20145326<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步骤 一.单元测试 1. 三种代码·伪代码·产品代码·测试代码Example:需求:我们要在一个MyUtil类中解决一个百分制成绩转成“优.良.中.及格.不及格”五级制成绩的功能. 伪代码: 百分制转五分制: 如果成绩小于60,转成“不及格” 如果成绩在60与70之间,转成“