面向对象_多线程_时钟

来源:互联网 发布:2016淘宝销售排行榜 编辑:程序博客网 时间:2024/06/01 09:17

案例:时钟


import java.awt.Graphics;import clarck.Drawable;/** * 创建图像类 * @author Lengendary * */public abstract class Shape implements Drawable, Runnable{    protected int time;    protected int radius;    protected int centreX,centreY;    public Shape(){    }    public int get() {        return radius;    }    public void setR(int r) {        radius = r;    }    public Shape(int x1, int y1, int num) {    }    public abstract void run();    @Override    public abstract void draw(Graphics g);    public void setTime(int num){        this.time = num;    }    public void setCentre(int x,int y){        centreX = x;        centreY = y;    }}
import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Stroke;import java.util.ArrayList;import java.util.List;/** * 数字显示(非贴图) * @author Administrator * */public class Ovals extends Shape {    private List<Oval> ovas =new ArrayList<Oval>();    public Ovals() {        for (int i = 0; i < 12; i++) {            Oval o =new Oval(350, 350, 315);            o.setHour(i);            ovas.add(o);        }    }    @Override    public void run() {    }    @Override    public void draw(Graphics g) {        Graphics2D g2d = (Graphics2D) g;        Stroke oldStroke = g2d.getStroke();        g2d.setColor(Color.BLUE);        g2d.setFont(new Font("黑体", Font.PLAIN, 16));        g2d.setStroke(new BasicStroke(5));        for(Oval o:ovas){            o.draw(g);        }        g2d.setStroke(oldStroke);    }}
import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Stroke;public class Oval extends Shape {    private int x1, y1;    private int hour;    private int r;    public int getR() {        return r;    }    public int getX2() {        return (int) (x1 + r*Math.sin(5*hour*(Math.PI / 30))-4);    }    public int getY2() {        return (int) (y1 -  r*Math.cos(5*hour*(Math.PI / 30)))+5;    }    public Oval(int x, int y, int radius) {        this.x1 = x;        this.y1 = y;        this.r = radius;    }    @Override    public void run() {        try {                    hour++;                    if (hour == 12) {                        hour = 0;                    }        } catch (Exception e) {        }    }    public void setHour(int num) {        this.hour = num;    }    public int getHour(){        return hour;    }    public int getT(){        if (hour==0) {            return 12;        }        return hour;    }    @Override    public void draw(Graphics g) {        Graphics2D g2d = (Graphics2D) g;        Stroke oldStroke = g2d.getStroke();        g2d.setColor(Color.GREEN);        g2d.setStroke(new BasicStroke(5));        g2d.setFont(new Font("黑体", Font.PLAIN, 35));        g.drawString(this.getT()+"", (int) (x1 + r*Math.sin(5*hour*(Math.PI / 30))-15)                , (int) (y1 -  r*Math.cos(5*hour*(Math.PI / 30)))+15);        g2d.setStroke(oldStroke);    }}
import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Stroke;/** * 秒针显示 * @author Administrator * */public class Mline extends Shape {    private int r;    private int x1;    private int y1;    private int second;    public Mline(int x,int y,int radius) {        this.x1=x;        this.y1=y;        this.r=radius;    }    @Override    public void run() {        try {            do {                Thread.sleep(1000);                second += 1;                if (second == 60) {                    second = 0;                }                Thread.sleep(1000);            } while (true);        } catch (Exception e) {        }    }    public void setSecond(int num){        this.second=num;    }    @Override    public void draw(Graphics g) {        Graphics2D g2d = (Graphics2D) g;        Stroke oldStroke = g2d.getStroke();        g2d.setColor(Color.BLUE);        g2d.setStroke(new BasicStroke(2));        g.drawOval((int) (x1 + r*Math.sin(second*Math.PI / 30))-13, (int) (y1 -  r*Math.cos(second*Math.PI / 30))-13,26,26);        g.drawString(second+"", (int) (x1 + r*Math.sin(second*Math.PI / 30))-4, (int) (y1 -r* Math.cos(second*Math.PI / 30))+5);        g2d.setStroke(oldStroke);    }}
import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Stroke;/** * 时针显示 * @author Administrator * */public class Hline extends Shape{    private int x1, y1;    private int hour;    private int r;    public Hline(int x,int y,int radius) {        this.x1=x;        this.y1=y;        this.r=radius;    }    @Override    public void run() {        try {            do {                Thread.sleep(3601000);                hour++;                if (hour == 24) {                    hour = 0;                }                Thread.sleep(3601000);            } while (true);        } catch (Exception e) {        }    }    public void setHour(int num){        this.hour=num;    }    @Override    public void draw(Graphics g) {        Graphics2D g2d = (Graphics2D) g;        Stroke oldStroke = g2d.getStroke();        g2d.setColor(Color.BLACK);        g2d.setStroke(new BasicStroke(4));        g.drawLine(x1, y1, (int) (x1 + r*Math.sin(5*hour*Math.PI / 30)), (int) (y1 -  r*Math.cos(5*hour*Math.PI / 30)));        g2d.setStroke(oldStroke);    }}
import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Stroke;/** * 分针显示 * @author Administrator * */public class Fline extends Shape{    private int x1, y1;    private int r;    private int minite;    public Fline(int x,int y,int r) {        this.x1= x;        this.y1= y;        this.r=r;    }    @Override    public void run() {        try {            do {                Thread.sleep(61000);                minite++;                if (minite == 60) {                    minite = 0;                }                Thread.sleep(61000);            } while (true);        } catch (Exception e) {        }    }    public void setMinite(int num){        this.minite = num;    }    @Override    public void draw(Graphics g) {        Graphics2D g2d = (Graphics2D) g;        Stroke oldStroke = g2d.getStroke();        g2d.setColor(Color.BLACK);        g2d.setStroke(new BasicStroke(2));        g.drawLine(x1, y1, (int) (x1 + r*Math.sin(minite*Math.PI / 30)), (int) (y1 -  r*Math.cos(minite*Math.PI / 30)));        g2d.setStroke(oldStroke);    }}
/** * 设置时间 * @author Administrator * */public interface SetTime {    public void setTime(int s,int m,int h);}
import java.awt.Color;import java.awt.Component;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.image.BufferedImage;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.Timer;import clarck.content.Fline;import clarck.content.Hline;import clarck.content.Mline;import clarck.content.Ovals;/** * 时钟界面 * @author Administrator * */@SuppressWarnings("serial")public class MainClarck extends JFrame implements SetTime{    private Mline seconO =new Mline(350, 350, 300);    private Fline miniL = new Fline(350, 350, 250);    private Hline hourL = new Hline(350, 350, 170);    private Ovals ovaL = new Ovals();    private Timer timer=null;    private Image buffImage =new BufferedImage(700, 700, 1);    private ExecutorService es = Executors.newFixedThreadPool(4);    private static Font defaultFont = new Font("Consolas", Font.PLAIN, 20);    public MainClarck(){        this.setTitle("时钟");        this.setSize(700, 700);        this.setResizable(false);        this.setLocationRelativeTo(null);        this.setDefaultCloseOperation(EXIT_ON_CLOSE);        this.addKeyListener(new KeyAdapter() {            @Override            public void keyPressed(KeyEvent e) {                if (e.getKeyCode() == KeyEvent.VK_F2) {                    JOptionPane.showMessageDialog(null, "请输入时间:");                }            }        });        timer = new Timer(1000, new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                es.execute(seconO);                es.execute(miniL);                es.execute(hourL);                es.execute(ovaL);                repaint();            }        });        timer.start();        for(Component c : this.getContentPane().getComponents()){            c.setFont(defaultFont);        }    }    @Override    public void paint(Graphics g) {        Graphics g2 =  buffImage.getGraphics();        super.paint(g2);        g2.setColor(Color.BLACK);        g2.drawOval(50, 50, 600, 600);        seconO.draw(g2);        miniL.draw(g2);        hourL.draw(g2);        ovaL.draw(g2);        repaint();        g.drawImage(buffImage, 0, 0, null);    }    public static void main(String[] args) {        new MainClarck().setVisible(true);    }    @Override    public void setTime(int s, int m, int h) {        seconO.setSecond(s);        miniL.setMinite(m);        hourL.setHour(h);    }}
import java.awt.Graphics;/**/*绘图接口public interface Drawable {    public abstract void draw(Graphics g);}
0 0