tickerlayer.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 225 行

JAVA
225
字号
/* *   * * Copyright  1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). *  * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA *  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */package com.sun.midp.chameleon.layers;import com.sun.midp.chameleon.*;import javax.microedition.lcdui.*;import java.util.*;import com.sun.midp.chameleon.skins.TickerSkin;import com.sun.midp.chameleon.skins.SoftButtonSkin;/** * */public class TickerLayer extends CLayer {    protected String text;    protected int textLoc;    protected int textLen;    /**     * A Timer which will handle firing repaints of the TickerPainter     */    protected Timer tickerTimer;    /**     * A TimerTask which will repaint the Ticker on a repeated basis     */    protected TickerPainter tickerPainter;    public TickerLayer() {        super(TickerSkin.IMAGE_BG, TickerSkin.COLOR_BG);    }    public void toggleAlert(boolean alertUp) {        if (alertUp && TickerSkin.IMAGE_AU_BG != null) {            super.setBackground(TickerSkin.IMAGE_AU_BG, 0);        } else if (!alertUp) {            super.setBackground(TickerSkin.IMAGE_BG, TickerSkin.COLOR_BG);        }    }    protected void initialize() {        super.initialize();        setAnchor();        tickerTimer = new Timer();    }    public void setAnchor() {	if (owner == null) {	    return;	}        bounds[X] = 0;	bounds[W] = owner.bounds[W];		bounds[H] = TickerSkin.HEIGHT;        if (textLoc > bounds[X] + bounds[W]) {            textLoc = bounds[X] + bounds[W];        }        switch (TickerSkin.ALIGN) {	case(Graphics.TOP):	    bounds[Y] = 0;	    break;            case(Graphics.BOTTOM):	default:	    bounds[Y] = owner.bounds[H];	    bounds[Y] -= SoftButtonSkin.HEIGHT + bounds[H];        }    }    /**     * Set the ticker of this ticker layer.     * @param text the text to be displayed on the ticker     * @return * @return true if visability of layer was changed     */    public boolean setText(String text) {        boolean oldVisable = super.visible;        synchronized (this) {            this.text = text;            super.visible = (text != null && text.trim().length() > 0);            textLoc = bounds[X] + bounds[W];            textLen = (text == null) ? 0 : TickerSkin.FONT.stringWidth(text);            setDirty();        }        return (oldVisable != super.visible);    }    public String getText() {        return text;    }    protected void paintBody(Graphics g) {        synchronized (this) {            if (text == null) {                return;            }            g.setFont(TickerSkin.FONT);            if (TickerSkin.COLOR_FG_SHD != TickerSkin.COLOR_FG) {                int x = textLoc;                int y = TickerSkin.TEXT_ANCHOR_Y;                switch (TickerSkin.TEXT_SHD_ALIGN) {                    case(Graphics.TOP | Graphics.LEFT):                        x -= 1;                        y -= 1;                        break;                    case(Graphics.TOP | Graphics.RIGHT):                        x += 1;                        y -= 1;                        break;                    case(Graphics.BOTTOM | Graphics.LEFT):                        x -= 1;                        y += 1;                        break;                    case(Graphics.BOTTOM | Graphics.RIGHT):                    default:                        x += 1;                        y += 1;                        break;                }                g.setColor(TickerSkin.COLOR_FG_SHD);                g.drawString(text, x, y, Graphics.TOP | TickerSkin.DIRECTION);            }            g.setColor(TickerSkin.COLOR_FG);            g.drawString(text, textLoc, TickerSkin.TEXT_ANCHOR_Y,                    Graphics.TOP | TickerSkin.DIRECTION);            if (tickerPainter == null) {                startTicker();            }        }    }    public void startTicker() {        if (!visible) {            return;        }        stopTicker();        tickerPainter = new TickerPainter();        tickerTimer.schedule(tickerPainter, 0, TickerSkin.RATE);    }    /**     * Stop the ticking of the ticker.     */    public void stopTicker() {        if (tickerPainter == null) {            return;        }        tickerPainter.cancel();        tickerPainter = null;    }    /**     * Update bounds of layer     *     * @param layers - current layer can be dependant on this parameter     */    public void update(CLayer[] layers) {        super.update(layers);        setAnchor();    }    /**     * A special helper class to repaint the Ticker     * if one has been set     */    private class TickerPainter extends TimerTask {        /**         * Repaint the ticker area of this Screen         */        public final void run() {            if (!visible) {                stopTicker();            } else {                requestRepaint();                switch (TickerSkin.DIRECTION) {                    case Graphics.RIGHT:                        textLoc += TickerSkin.SPEED;                        if (textLoc >= (bounds[W] + textLen)) {                            textLoc = -(textLen);                        }                        break;                    case Graphics.LEFT:                    default:                        textLoc -= TickerSkin.SPEED;                        if (textLoc <= -(textLen)) {                            textLoc = bounds[X] + bounds[W];                        }                }            }        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?