java程序设计——实验六

简介: 1.实现一个红色反弹球的程序,当球撞击边框时,球从边框弹回并以相反方向运动。2 实现一个时钟, 效果如图所示


《Java程序设计》实 验 报 告(六)

实验名称:java编程基础

实验地点10-306

所使用的工具软件及环境:

JDK1.7或1.8与Eclipse

一、实验目的:

  1. 熟悉图形、图像的使用方法,
  2. 理解计算机动画的原理和Java 的多线程处理机制,能够编写Applet

中使用的动画。

二、实验内容:

1.实现一个红色反弹球的程序,当球撞击边框时,球从边框弹回并以相反方向运动。

编辑

三、源代码

//Ball.java

package实验6;

import java.awt.*;

import java.applet.*;

publicclassBallextends Applet implements Runnable{

    intX,Y;

    public Ball() {

    }

    Thread draw=null;

    publicvoid init() {

        draw=new Thread(this);

        setBackground(Color.green);

    }

    publicvoid paint(Graphics g) {

        g.setColor(Color.red);

        g.fillOval(X, Y, 20, 20);

    }

    publicvoid start() {

        draw.start();

        try {

            Thread.sleep(50);

        }catch(InterruptedExceptione) {}

    }

    publicvoid stop() {

        draw=null;

    }

    publicvoid run() {

        intx=(int)(Math.random()*10)%2+3;

        inty=(int)(Math.random()*10)%2+3;

        try {

            while(true) {

                X=X+x;

                Y=Y+y;

                if(Y>getHeight()-40||Y<0)

                   y=-y;

                if(X>getHeight()-40||X<0)

                   x=-x;

                repaint();

                Thread.sleep(100);

            }

        }catch(InterruptedException e) {}

    }

}

四、实验结果测试、收获与体会:

编辑编辑

    能够运行小程序,能够完成初步线程的实现,对线程编辑有了进一步的学习。

实验名称:java编程基础

实验地点10-306

所使用的工具软件及环境:

JDK1.7或1.8与Eclipse

一、实验目的:

  1. 熟悉图形、图像的使用方法,
  2. 理解计算机动画的原理和Java 的多线程处理机制,能够编写Applet

中使用的动画。

二、实验内容:

2 实现一个时钟, 效果如图所示:

编辑

参考代码:

import java.util.*;

import java.awt.*;

import java.applet.*;

import java.text.*;

public class Clock extends Applet implements Runnable {

    private volatile Thread timer;       // 显示时钟的线程

    private int lastxs, lastys, lastxm,

                lastym, lastxh, lastyh;  // 用于绘制指针

    private SimpleDateFormat formatter;  // 用于日期格式化

    private String lastdate;             // 显示日期的字符串

    private Font clockFaceFont;          // 钟面字体

    private Date currentDate;            // 当前日期

    private Color handColor;             // 指针颜色

    private Color numberColor;           // 秒针和数字的颜色

    private int xcenter = 80, ycenter = 55; // 中心位置

    public void init() {

        int x,y;

        lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0;

        formatter = new SimpleDateFormat ("yyyy MMM dd hh:mm:ss ",

                                          Locale.getDefault());

        currentDate = new Date();

        lastdate = formatter.format(currentDate);

        clockFaceFont = new Font("Serif", Font.PLAIN, 14);

        handColor = Color.blue;

        numberColor = Color.darkGray;

        try {

            setBackground(new Color(Integer.parseInt(getParameter("bgcolor"),

                                                     16)));

        } catch (NullPointerException e) {

        } catch (NumberFormatException e) {

        }

        try {

            handColor = new Color(Integer.parseInt(getParameter("fgcolor1"),

                                                   16));

        } catch (NullPointerException e) {

        } catch (NumberFormatException e) {

        }

        try {

            numberColor = new Color(Integer.parseInt(getParameter("fgcolor2"),

                                                     16));

        } catch (NullPointerException e) {

        } catch (NumberFormatException e) {

        }

        resize(400,400);              // 设置窗体大小

    }

    // 绘制时钟

    public void update(Graphics g) {

        int xh, yh, xm, ym, xs, ys;

        int s = 0, m = 10, h = 10;

        String today;

        currentDate = new Date();

        formatter.applyPattern("s");

        try {

            s = Integer.parseInt(formatter.format(currentDate));

        } catch (NumberFormatException n) {

            s = 0;

        }

        formatter.applyPattern("m");

        try {

            m = Integer.parseInt(formatter.format(currentDate));

        } catch (NumberFormatException n) {

            m = 10;

        }

        formatter.applyPattern("h");

        try {

            h = Integer.parseInt(formatter.format(currentDate));

        } catch (NumberFormatException n) {

            h = 10;

        }

        // 设置指针位置

        xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + xcenter);

        ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + ycenter);

        xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + xcenter);

        ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + ycenter);

        xh = (int) (Math.cos((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30

                   + xcenter);

        yh = (int) (Math.sin((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30

                   + ycenter);

        // 时钟下面显示的日期时间字符串

        formatter.applyPattern("yyyy MMM dd HH:mm:ss ");

        today = formatter.format(currentDate);

        g.setFont(clockFaceFont);

        g.setColor(getBackground());

        if (xs != lastxs || ys != lastys) {

            g.drawLine(xcenter, ycenter, lastxs, lastys);

            g.drawString(lastdate, 5, 125);

        }

        if (xm != lastxm || ym != lastym) {

            g.drawLine(xcenter, ycenter-1, lastxm, lastym);

            g.drawLine(xcenter-1, ycenter, lastxm, lastym);

        }

        if (xh != lastxh || yh != lastyh) {

            g.drawLine(xcenter, ycenter-1, lastxh, lastyh);

            g.drawLine(xcenter-1, ycenter, lastxh, lastyh);

        }

        g.setColor(numberColor);

        g.drawString(today, 5, 125);

        // 绘制指针

        g.drawLine(xcenter, ycenter, xs, ys);

        g.setColor(handColor);

        g.drawLine(xcenter, ycenter-1, xm, ym);

        g.drawLine(xcenter-1, ycenter, xm, ym);

        g.drawLine(xcenter, ycenter-1, xh, yh);

        g.drawLine(xcenter-1, ycenter, xh, yh);

        lastxs = xs; lastys = ys;

        lastxm = xm; lastym = ym;

        lastxh = xh; lastyh = yh;

        lastdate = today;

        currentDate = null;

    }

    public void paint(Graphics g) {

        g.setFont(clockFaceFont);

        //绘制圆形钟面

        g.setColor(handColor);

        g.drawArc(xcenter-50, ycenter-50, 100, 100, 0, 360);

        g.setColor(numberColor);

        g.drawString("9", xcenter-45, ycenter+3);

        g.drawString("3", xcenter+40, ycenter+3);

        g.drawString("12", xcenter-5, ycenter-37);

        g.drawString("6", xcenter-3, ycenter+45);

        // 绘制指针

        g.setColor(numberColor);

        g.drawString(lastdate, 5, 125);

        g.drawLine(xcenter, ycenter, lastxs, lastys);

        g.setColor(handColor);

        g.drawLine(xcenter, ycenter-1, lastxm, lastym);

        g.drawLine(xcenter-1, ycenter, lastxm, lastym);

        g.drawLine(xcenter, ycenter-1, lastxh, lastyh);

        g.drawLine(xcenter-1, ycenter, lastxh, lastyh);

    }

    //启动线程

    public void start() {

      //补充完整

    }

    public void stop() {

       // //补充完整

    }

    public void run() {

         //补充完整

    }

}

三、源代码

//Clock.java

package实验6;

import java.util.*;

import java.awt.*;

import java.applet.*;

import java.text.*;

publicclassClockextends Applet implements Runnable {

    privatevolatile Thread timer;       // 显示时钟的线程

    privateintlastxs, lastys, lastxm,

                lastym, lastxh, lastyh// 用于绘制指针

    private SimpleDateFormat formatter// 用于日期格式化

    private String lastdate;             // 显示日期的字符串

    private Font clockFaceFont;          // 钟面字体

    private Date currentDate;            // 当前日期

    private Color handColor;             // 指针颜色

    private Color numberColor;           // 秒针和数字的颜色

    privateintxcenter = 80, ycenter = 55; // 中心位置

    publicvoid init() {

        intx,y;

        lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0;

        formatter = new SimpleDateFormat ("yyyy MMM dd hh:mm:ss ",

                                          Locale.getDefault());

        currentDate = new Date();

        lastdate = formatter.format(currentDate);

        clockFaceFont = new Font("Serif", Font.PLAIN, 14);

        handColor = Color.blue;

        numberColor = Color.darkGray;

        try {

            setBackground(new Color(Integer.parseInt(getParameter("bgcolor"),

                                                     16)));

        } catch (NullPointerException e) {

        } catch (NumberFormatException e) {

        }

        try {

            handColor = new Color(Integer.parseInt(getParameter("fgcolor1"),

                                                   16));

        } catch (NullPointerException e) {

        } catch (NumberFormatException e) {

        }

        try {

            numberColor = new Color(Integer.parseInt(getParameter("fgcolor2"),

                                                     16));

        } catch (NullPointerException e) {

        } catch (NumberFormatException e) {

        }

        resize(400,400);              // 设置窗体大小

    }

    // 绘制时钟

    publicvoid update(Graphics g) {

        intxh, yh, xm, ym, xs, ys;

        ints = 0, m = 10, h = 10;

        String today;

        currentDate = new Date();

        formatter.applyPattern("s");

        try {

            s = Integer.parseInt(formatter.format(currentDate));

        } catch (NumberFormatException n) {

            s = 0;

        }

        formatter.applyPattern("m");

        try {

            m = Integer.parseInt(formatter.format(currentDate));

        } catch (NumberFormatException n) {

            m = 10;

        }

        formatter.applyPattern("h");

        try {

            h = Integer.parseInt(formatter.format(currentDate));

        } catch (NumberFormatException n) {

            h = 10;

        }

        // 设置指针位置

        xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + xcenter);

        ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + ycenter);

        xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + xcenter);

        ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + ycenter);

        xh = (int) (Math.cos((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30

                   + xcenter);

        yh = (int) (Math.sin((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30

                   + ycenter);

        // 时钟下面显示的日期时间字符串

        formatter.applyPattern("yyyy MMM dd HH:mm:ss ");

        today = formatter.format(currentDate);

        g.setFont(clockFaceFont);

        g.setColor(getBackground());

        if (xs != lastxs || ys != lastys) {

            g.drawLine(xcenter, ycenter, lastxs, lastys);

            g.drawString(lastdate, 5, 125);

        }

        if (xm != lastxm || ym != lastym) {

            g.drawLine(xcenter, ycenter-1, lastxm, lastym);

            g.drawLine(xcenter-1, ycenter, lastxm, lastym);

        }

        if (xh != lastxh || yh != lastyh) {

            g.drawLine(xcenter, ycenter-1, lastxh, lastyh);

            g.drawLine(xcenter-1, ycenter, lastxh, lastyh);

        }

        g.setColor(numberColor);

        g.drawString(today, 5, 125);

        // 绘制指针

        g.drawLine(xcenter, ycenter, xs, ys);

        g.setColor(handColor);

        g.drawLine(xcenter, ycenter-1, xm, ym);

        g.drawLine(xcenter-1, ycenter, xm, ym);

        g.drawLine(xcenter, ycenter-1, xh, yh);

        g.drawLine(xcenter-1, ycenter, xh, yh);

        lastxs = xs; lastys = ys;

        lastxm = xm; lastym = ym;

        lastxh = xh; lastyh = yh;

        lastdate = today;

        currentDate = null;

    }

    publicvoid paint(Graphics g) {

        g.setFont(clockFaceFont);

        //绘制圆形钟面

        g.setColor(handColor);

        g.drawArc(xcenter-50, ycenter-50, 100, 100, 0, 360);

        g.setColor(numberColor);

        g.drawString("9", xcenter-45, ycenter+3);

        g.drawString("3", xcenter+40, ycenter+3);

        g.drawString("12", xcenter-5, ycenter-37);

        g.drawString("6", xcenter-3, ycenter+45);

        // 绘制指针

        g.setColor(numberColor);

        g.drawString(lastdate, 5, 125);

        g.drawLine(xcenter, ycenter, lastxs, lastys);

        g.setColor(handColor);

        g.drawLine(xcenter, ycenter-1, lastxm, lastym);

        g.drawLine(xcenter-1, ycenter, lastxm, lastym);

        g.drawLine(xcenter, ycenter-1, lastxh, lastyh);

        g.drawLine(xcenter-1, ycenter, lastxh, lastyh);

    }

    //启动线程

    publicvoid start() {

      //补充完整

    timer = new Thread(this);            //用当前对象为参数创建线程

        timer.start();

    }

    publicvoid stop() {

       // //补充完整

    timer = null;

    }

    publicvoid run() {

         //补充完整

    Thread me = Thread.currentThread();

        while (timer == me) {

            try {

                Thread.currentThread().sleep(100);

            } catch (InterruptedException e) {

            }

            repaint();                      //休眠一段时间后重绘窗体

        }

    }

}

四、实验结果测试、收获与体会:

编辑

补充实验内容中的代码,覆写了Runnable接口中的run()方法,并且实例化Thread类对象,也运用sleep()使线程睡眠等。通过该实验更加对线程的程序设计有了更深入的学习,对今后的学习有了较大的帮助。

相关文章
|
2月前
|
Java 测试技术 开发者
💡Java 零基础:彻底掌握 for 循环,打造高效程序设计
【10月更文挑战第15天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
125 63
|
2月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
147 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
4月前
|
消息中间件 Java Kafka
【Azure 事件中心】在微软云中国区 (Mooncake) 上实验以Apache Kafka协议方式发送/接受Event Hubs消息 (Java版)
【Azure 事件中心】在微软云中国区 (Mooncake) 上实验以Apache Kafka协议方式发送/接受Event Hubs消息 (Java版)
114 1
|
4月前
|
数据采集 人工智能 监控
【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集
【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集
|
6月前
|
存储 小程序 前端开发
java毕设项目|宿舍管理系统小程序设计与实现
java毕设项目|宿舍管理系统小程序设计与实现
|
6月前
|
监控 Java API
Java 程序设计 第八章 线程
Java 程序设计 第八章 线程
|
6月前
|
Java 编译器 C语言
Java 程序设计 第2章 Java基本语法 笔记
Java 程序设计 第2章 Java基本语法 笔记
|
6月前
|
Java
Java 程序设计 第七章 文件管理与输入/输出 笔记
Java 程序设计 第七章 文件管理与输入/输出 笔记
|
6月前
|
Java Android开发
Java 程序设计 第6章 异常与断言 笔记
Java 程序设计 第6章 异常与断言 笔记
|
6月前
|
Java 编译器
Java 程序设计 第4章 继承 笔记
Java 程序设计 第4章 继承 笔记
下一篇
DataWorks