面向对象_多线程_时钟
来源:互联网 发布: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
- 面向对象_多线程_时钟
- 黑马程序员_面向对象_多线程
- 黑马程序员_面向对象_多线程2
- 翁凯_面向对象程序设计_有秒计时的数字时钟
- 面向对象_静态
- 面向对象_封装
- 面向对象_继承
- 面向对象_多态
- 面向对象_继承
- 面向对象_总结
- 面向对象_封装
- 面向对象_静态
- 面向对象_匿名对象
- 黑马程序员_面向对象_继承
- Java基础_面向对象_继承
- Java基础_面向对象_多态
- 黑马程序员_面向对象_封装
- 黑马程序员_面向对象_多态
- ios 抽屉效果实现
- spark集群参数配置理解
- 2015.5.24the ONE第一天
- 低照度图像增强
- c++ vector 元素取地址问题
- 面向对象_多线程_时钟
- java 不可变类
- Linux下配置安装PHP环境(Apache2)
- Android与 IOS系统的性能对比
- Oracle新建用户、角色,授权,建表空间
- 黑马程序员——【Java反射学习】反射的应用:测试泛型的本质
- 最有矩链乘问题—常见Dp
- HDU1285---确定比赛名次
- 交互模式和脚本模式