麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

(原創 by 徐劍生)《Java Swing之利用簡單的多線程實現動態時鐘》

2019-11-14 21:06:03
字體:
來源:轉載
供稿:網友
(原創 by 徐劍生)《java Swing之利用簡單的多線程實現動態時鐘》 Posted on 2014-09-08 20:31 徐劍生 閱讀(...) 評論(...) 編輯 收藏

注:本文僅供學習和交流

以上是截圖,下面上代碼

第一個類是Circle

package org.xt.util;import java.awt.Point;public class Circle {    PRivate Point centre;    private int radius;    public Circle(Point centre, int radius) {        this.centre = centre;        this.radius = radius;    }    public Point getCentre() {        return centre;    }    public void setCentre(Point centre) {        this.centre = centre;    }    public int getRadius() {        return this.radius;    }    public void setRadius(int radius) {        this.radius = radius;    }}

第二個類是Clock

package org.xt.clock;import java.awt.BasicStroke;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.util.Calendar;import javax.swing.JComponent;import javax.swing.JFrame;import javax.swing.JPanel;@SuppressWarnings("serial")public class Clock extends JComponent implements Runnable {    private int radius;    public Clock(int radius) {        this.radius = radius;    }    public void paint(Graphics g) {        Graphics2D g2d = (Graphics2D) g;     //這兩句話是去除線條鋸齒的關鍵,至于原理筆者也不清楚,這兩句是筆者從網絡上找來的(就這兩句不是自己寫的,呵呵)        g2d.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);     //鐘盤所在的矩形的左上角的坐標        int clockPlateX = 0;        int clockPlateY = 0;        g2d.setColor(Color.GRAY);     //畫兩個同心圓盤,作為時鐘的邊框        g2d.drawOval(clockPlateX, clockPlateY, this.radius * 2, this.radius * 2);        g2d.drawOval(clockPlateX + 5, clockPlateY + 5, this.radius * 2 - 10, this.radius * 2 - 10);     //圓心坐標        int centreX = this.radius;        int centreY = centreX;        g2d.setStroke(new BasicStroke(0.8f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));     //這是鐘盤中心的那個點        g2d.fillOval(centreX - 3, centreY - 3, 6, 6);        g2d.setStroke(new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));     //以下開始畫大刻度,共有12個,表示有12個小時,基準是9時所指的刻度        double degree = 0;        double radian = Math.toRadians(degree);        for (int i = 0; i < 12; ++i) {       //計算刻度線相對位置位于左邊的點            int leftX = (int) ((double) centreX - (this.radius - 15) * Math.cos(radian));            int leftY = (int) ((double) centreY - (this.radius - 15) * Math.sin(radian));       //計算刻度線相對位置位于右邊的點            int rightX = (int) ((double) centreX - (this.radius - 25) * Math.cos(radian));            int rightY = (int) ((double) centreY - (this.radius - 25) * Math.sin(radian));                  g2d.drawLine(leftX, leftY, rightX, rightY);            degree += 30;       //將角度轉換為弧度            radian = Math.toRadians(degree);        }        g2d.setStroke(new BasicStroke(1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));             //以下開始畫小刻度,共有60-12=48個,基準是0時所指的刻度        degree = 0;        radian = Math.toRadians(degree);        for (int i = 0; i < 60; ++i) {         //此條件在于避免小刻度和大刻度重復            if (i != 0 && degree % 30 != 0) {                int leftX = (int) ((double) centreX - (this.radius - 15) * Math.cos(radian));                int leftY = (int) ((double) centreY - (this.radius - 15) * Math.sin(radian));                int rightX = (int) ((double) centreX - (this.radius - 17) * Math.cos(radian));                int rightY = (int) ((double) centreY - (this.radius - 17) * Math.sin(radian));                g2d.drawLine(leftX, leftY, rightX, rightY);            }        //每次增加6度            degree += 360 / 60;            //將角度轉換為弧度            radian = Math.toRadians(degree);        }     //獲取當前的時,分,秒(Date類已經被淘汰,這里使用Calendar)        Calendar cal = Calendar.getInstance();        int second = cal.get(Calendar.SECOND);        int minute = cal.get(Calendar.MINUTE);        int hour = cal.get(Calendar.HOUR_OF_DAY);        if (hour > 12) {            hour = hour % 12;        }     //計算秒針當前距離開始位置的弧度,其余兩句分別是分針和時針        double secondProp = Math.toRadians(second * (360 / 60));        double minuteProp = Math.toRadians(minute * (360 / 60));        double hourProp = Math.toRadians((hour + minuteProp / (2 * Math.PI)) * (360 / 12));        int leftX = (int) (centreX + (this.radius - 25) * Math.sin(secondProp));        int leftY = (int) (centreY - (this.radius - 25) * Math.cos(secondProp));        g2d.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));        g.drawLine(leftX, leftY, centreX, centreY);        leftX = (int) (centreX + (this.radius - 45) * Math.sin(minuteProp));        leftY = (int) (centreY - (this.radius - 45) * Math.cos(minuteProp));        g2d.setStroke(new BasicStroke(1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));        g.drawLine(leftX, leftY, centreX, centreY);        leftX = (int) (centreX + (this.radius - 70) * Math.sin(hourProp));        leftY = (int) (centreY - (this.radius - 70) * Math.cos(hourProp));        g2d.setStroke(new BasicStroke(2.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));        g.drawLine(leftX, leftY, centreX, centreY);    }    public void run() {        while (true) {            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            this.repaint();        }    }    public static void main(String[] args) {        JFrame frame = new JFrame();        JPanel panel = new JPanel(new BorderLayout());        frame.setContentPane(panel);        Clock clock = new Clock(150);        new Thread(clock).start();        panel.add(clock, BorderLayout.CENTER);        frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);        frame.setSize(600, 400);        frame.setVisible(true);    }}

呵呵,水平有限,代碼寫的比較亂

——寫于2014-09-08 20:30:00上下


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久99亚洲精品 | 国产羞羞网站 | 日韩精品中文字幕一区 | 激情视频在线播放 | 依依成人综合 | a网站在线 | 精品一区二区三区在线观看视频 | 黄色特级片黄色特级片 | 欧美黄成人免费网站大全 | 99re热视频这里只精品 | 欧美大胆xxxx肉体摄影 | 欧美wwwwww | 免费国产视频在线观看 | 一级黄色免费观看视频 | 亚洲国产成人久久成人52 | 制服丝袜日日夜夜 | 国产69精品久久久久久久久久 | 色呦呦一区二区三区 | av在线免费观看播放 | 日韩激情 | 美国av免费看 | 一本在线高清码电影 | 成人男女视频 | 一区国产精品 | aaaaaaa毛片 | 韩国精品久久久 | 亚洲成人入口 | 欧美日韩免费一区 | chinese xvideos gay| 日本欧美一区二区三区在线播 | 欧美a∨一区二区三区久久黄 | 免费日本一区二区 | 日韩在线播放中文字幕 | 久久久久亚洲视频 | av在线一区二区三区四区 | 精品国产91一区二区三区 | 久久激情国产 | 国产成人精品一区二区视频免费 | 黄色av网 | 欧美亚洲国产一区二区三区 | 欧美日韩在线中文字幕 |