<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zeyuphoenix

    愿我愛的人快樂,愿愛我的人快樂,為了這些,我愿意不快樂.

    指針時鐘改進(增加計時器)

    現在很多指針時鐘都有一個小的計時表,這里把上次的指針時鐘改進一下,增加一個簡單的秒表功能,首先確定的是以前的指針時鐘是不修改的,只是在它的基礎上再繪制一個小的只有1個指針的時鐘.

    界面圖如下:



    工程目錄結構如下:

    首先要說的類就是StopwatchParts

    /**

     * To define all modules which a analog-type stopwatch consists of.

     */

    publicabstractclass StopwatchParts extends RotateParts {

    它和BasicParts幾乎完全一致,也是繼承于RotateParts,唯一區別是BasicParts需要畫時分秒,它只需要畫一個指針.

    先看它的屬性:

        /**

         * Millisecond hand.

         */

        protected Shape millisecondHand;

        /**

         * Millisecond hand behavior controller.

         */

        protected AffineTransform millisecondTransform;

    2個屬性提供計時時針的形狀和繪制映射類,通過它們可以對鐘表進行繪制.

        /**

         * Moves all parts, to leave some margin.

         */

        protectedtransient AffineTransform trans;

    這個屬性是在對時分秒指針繪制時提供變換的.

    再看它的構造函數

    /**

    * Constructor: Joins every parts in a entire analog-type clock.

    */

        protected StopwatchParts(Shape dial, Shape millisecondHand)

    需要傳入外圍圖形、指針圖形.當然可以傳入new GeneralPath()

    在以后再具體描繪它們.

        /**

         * Initializes hand transformation.

         */

        protectedvoid initTransform() {

            millisecondTransform = getTransform();

        }

    這個是初始化指針繪制映射類的.默認讓它們都指向12點方向.

        /**

         * Default algorithm for hands's action trace.

         */

        @Override

        publicvoid doTransform(int hour, int minute, int second, int millisecond) {

           if (millisecondTransform != null) {

               setToRotation(millisecondTransform, millisecond / 100.0, 10);

           }

        }

    這個是父類的虛函數的實現,根據給定值旋轉指定角度呈現給畫面.

    最后是重要的paintComponent方法了

        @Override

        publicvoid paintComponent(Graphics g) {

    它按照屬性了上面取得的繪制映射類進行繪制

    首先是繪制外圍界面:

            if (dial != null) {

                  g2.setPaint(Color.black);

                  g2.draw(trans.createTransformedShape(dial));

               }

    然后是繪制指針:

           // Draw millisecond hand

           g2.setPaint(Color.red);

           g2.fill(trans.createTransformedShape(millisecondTransform

                  .createTransformedShape(millisecondHand)));

    基本和BasicParts繪制時一樣的.

    然后是MyStopwatchParts,它和MyParts類一致,只是構造函數比較簡單

    public MyStopwatchParts(float x, float y, float width) throws Exception {

    只需要配置計時時鐘的位置和大小就可以了.

    在繪制時也只需要繪制一個指針和簡單的幾個標示點.

        @Override

        publicvoid paintComponent(Graphics g) {

           super.paintComponent(g);

           // Draw 10 ticks

           drawTicks(g, 10);

        }

    基本可以參考MyParts類秒針的繪制.

    最后就是合并類MyPartsWithStopwatch,它是在MyParts的基礎上繪制新創立的計時時鐘MyStopwatchParts,先看繼承關系:

    /**

     * To implement a analog-type clock with stopwatch.<br>

     */

    publicclass MyPartsWithStopwatch extends MyParts {

    然后是它的屬性:

        /**

         * The stopwatch parts.

         */

        private MyStopwatchParts stopwatch;

    它就是需要在指針時鐘上繪制的組建.

    然后是方法,它在構造函數里初始化stopwatch

    stopwatch = new MyStopwatchParts(sx, sy, sWidth);

    然后復寫doTransformpaintComponent方法,增加stopwatch的刷新:

        /**

         */

        @Override

     publicvoid doTransform(int hour, int minute, int second, int millisecond) {

           super.doTransform(hour, minute, second, millisecond);

           stopwatch.doTransform(hour, minute, second, millisecond);

        }

        /**

         */

        @Override

        publicvoid paintComponent(Graphics g) {

           super.paintComponent(g);

           stopwatch.paintComponent(g);

        }

    這個繪制類就完成了.

    到此為止,所有的指針時鐘的創立工作全部完成.

    最后通過

        /**

         * This method shows how to create a user defined analog-type clock

         */

        private AnalogClock getColorfulClock() {

           if (colorfulClock == null) {

               try {

               colorfulClock = new AnalogClock(new MyPartsWithStopwatch ());

               } catch (Exception e) {

                  e.printStackTrace();

               }

           }

           returncolorfulClock;

        }

    就可以使用了.

    posted on 2010-04-06 22:08 zeyuphoenix 閱讀(539) 評論(0)  編輯  收藏 所屬分類: Java的時鐘

    導航

    <2010年4月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    統計

    常用鏈接

    留言簿(52)

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产午夜精品免费一区二区三区| 新最免费影视大全在线播放| 亚洲中文字幕一二三四区| 亚洲午夜电影在线观看高清| 亚洲精华国产精华精华液| 中文字幕在线视频免费| 两个人的视频高清在线观看免费| 五级黄18以上免费看| 日韩精品在线免费观看| 毛片免费观看视频| 亚洲午夜久久久久久久久久| 亚洲综合激情另类小说区| MM1313亚洲国产精品| 在线看免费观看AV深夜影院| 亚洲国产成人久久笫一页| 亚洲一区二区三区深夜天堂| 中文字幕免费在线视频| 女人18毛片特级一级免费视频| 人妻无码久久一区二区三区免费 | 四虎成人精品永久免费AV| 全免费a级毛片免费看无码| 亚洲国产美女精品久久久久∴| 国产免费AV片无码永久免费| 久久av无码专区亚洲av桃花岛| 亚洲熟女一区二区三区| 国产精品亚洲专一区二区三区| 亚洲色欲色欱wwW在线| 最近免费视频中文字幕大全| 亚洲一级特黄大片无码毛片 | 中文字幕人成人乱码亚洲电影 | 亚洲美女免费视频| 夜色阁亚洲一区二区三区| 国产91在线|亚洲| 免费h片在线观看网址最新| 久久精品国产精品亚洲精品| 国产午夜亚洲精品不卡| 女人18毛片a级毛片免费视频| 四虎影视免费永久在线观看| 亚洲av无码国产综合专区| 99精品一区二区免费视频| 亚洲欧洲一区二区|