Save This Page
Home » openjdk-7 » net.jbeans » ui » label » [javadoc | source]
    1   /* -------------------------------------------------------------------
    2    * Java source file for the class ScrollLabel
    3    * 
    4    * Copyright (c), 2002, Masahiro Takatsuka.
    5    * All Rights Researved.
    6    * 
    7    * Original Author: Masahiro Takatsuka (masa@jbeans.net)
    8    * $Author: takatsukam $
    9    * 
   10    * $Date: 2003/07/25 04:51:47 $
   11    * 
   12    * $Id: ScrollLabel.java,v 1.1.1.1 2003/07/25 04:51:47 takatsukam Exp $
   13    * 
   14    * Reference:		Document no:
   15    * ___				___
   16    * 
   17    * To Do:
   18    * ___
   19    * 
   20   ------------------------------------------------------------------- */
   21   
   22   /* --------------------------- Package ---------------------------- */
   23   package net.jbeans.ui.label;
   24   
   25   /* ------------------ Import classes (packages) ------------------- */
   26   import java.awt;
   27   import java.io;
   28   import java.net;
   29   import java.util;
   30   
   31   import javax.swing;
   32   
   33   import net.jbeans.util.debug;
   34   
   35   /*====================================================================
   36                    Implementation of class ScrollLabel                  
   37   ====================================================================*/
   38   /**
   39    * ScrollLabel is a scrolling label.
   40    * 
   41    * @version $Revision: 1.1.1.1 $
   42    * @author Masahiro Takatsuka (masa@jbeans.net)
   43    * @see JPanel
   44    * @see Runnable, Serializable
   45    */
   46   
   47   public class ScrollLabel extends JPanel implements Runnable, Serializable {
   48   	/**
   49   	 * debug flag
   50   	 */
   51   	private static final boolean DEBUG = Debug.getDebugFlag(ScrollLabel.class);
   52   
   53   	public static final String DOWN = "down";
   54   	public static final String UP = "up";
   55   	public static final String LEFT = "left";
   56   	public static final String RIGHT = "right";
   57   	
   58   	private static final String DEFAULT_DIR = LEFT;
   59   	private static final int DEFAULT_DELAY = 200;
   60   	private static final int DEFAULT_XSPEED = 2;
   61   	private static final int DEFAULT_YSPEED = 2;
   62   	private static final Color DEFAUTL_TEXT_COLOR = Color.black;
   63   	private static final Color DEFAUTL_BG_COLOR = Color.white;
   64   
   65       private int delay;
   66       private int xspeed;
   67       private int yspeed;
   68       private int xsize;
   69       private int ysize;
   70       private int xOffset;
   71       private int yOffset;
   72       private int index;
   73       private OrientedLabel[] scrollLabels;	// String
   74       private String[] moveTypes;	// Integer
   75   	private Color[] bgColors;
   76   	
   77       transient private int scrollWidth;
   78       transient private int scrollHeight;
   79       transient private int currentIndex;
   80       transient private Thread runner;
   81       transient private boolean running = false;
   82   	transient private boolean textChanged = true;
   83   	
   84       public ScrollLabel() {
   85           this.delay = DEFAULT_DELAY;
   86           this.xspeed = DEFAULT_XSPEED;
   87           this.yspeed = DEFAULT_YSPEED;
   88   		this.xsize = -1;
   89   		this.ysize = -1;		
   90   		initialize();
   91       }
   92   
   93   	private void initialize() {
   94   		setLayout(null);
   95   	}
   96   	
   97       /**
   98        * Serialization methods
   99        */
  100       private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException {
  101   		s.defaultReadObject();
  102   		
  103   		initialize();
  104       }
  105   
  106   	public void setDelay(int delay) {
  107   		this.delay = (delay > 0) ? delay : DEFAULT_DELAY;
  108   	}
  109   
  110   	public int getDelay() {
  111   		return this.delay;
  112   	}
  113   
  114   	public void setXSpeed(int speed) {
  115   		this.xspeed = (speed > 0) ? speed : DEFAULT_XSPEED;
  116   	}
  117   
  118   	public int getXSpeed() {
  119   		return this.xspeed;
  120   	}
  121   
  122   	public void setYSpeed(int speed) {
  123   		this.yspeed = (yspeed > 0) ? yspeed : DEFAULT_YSPEED;
  124   	}
  125   
  126   	public int getYspeed() {
  127   		return this.yspeed;
  128   	}
  129   
  130   	public void setNumberOfLabels(int num) {
  131   		this.index = num;
  132   		this.scrollLabels = new OrientedLabel[this.index];
  133   		this.moveTypes = new String[this.index];
  134   		for (int i = 0; i < this.index; i++) {
  135   			this.scrollLabels[i] = new OrientedLabel();
  136   			this.moveTypes[i] = DEFAULT_DIR;
  137   		}
  138   	}
  139   	
  140   	public int getNumberOfLabels() {
  141   		return this.index;
  142   	}
  143   	
  144   	public void setScrollTexts(String[] texts) {
  145   		int num = Math.min(this.index, texts.length);
  146   		
  147   		for (int i = 0; i < num; i++) {
  148   			this.scrollLabels[i].setText(texts[i]);
  149   		}
  150   	}
  151   
  152   	public String[] getScrollTexts() {
  153   		String[] texts = new String[this.index];
  154   		for (int i = 0; i < this.index; i++) {
  155   			texts[i] = this.scrollLabels[i].getText();
  156   		}
  157   		return texts;
  158   	}
  159   
  160   	public void setScrollImages(Image[] images) {
  161   		int num = Math.min(this.index, images.length);
  162   
  163   		for (int i = 0; i < num; i++) {
  164   			if (images[i] != null) {
  165   				this.scrollLabels[i].setIcon(new ImageIcon(images[i]));
  166   			}
  167   		}
  168   	}
  169   
  170   	public Image[] getScrollImages() {
  171   		Image[] images = new Image[this.index];
  172   		for (int i = 0; i < this.index; i++) {
  173   			images[i] = ((ImageIcon) this.scrollLabels[i].getIcon()).getImage();
  174   		}
  175   		return images;
  176   	}
  177   	
  178   	public void setTextColors(Color[] textColors) {
  179   		int num = Math.min(this.index, textColors.length);
  180   
  181   		for (int i = 0; i < num; i++) {
  182   			this.scrollLabels[i].setForeground(textColors[i]);
  183   		}
  184   	}
  185   
  186   	public Color[] getTextColors() {
  187   		Color[] colors = new Color[this.index];
  188   		for (int i = 0; i < this.index; i++) {
  189   			colors[i] = this.scrollLabels[i].getForeground();
  190   		}
  191   		return colors;
  192   	}
  193   
  194   	public void setMoveTypes(String[] moveTypes) {
  195   		int num = Math.min(this.index, moveTypes.length);
  196   
  197   		for (int i = 0; i < num; i++) {
  198   			this.moveTypes[i] = moveTypes[i];
  199   		}
  200   	}
  201   
  202   	public String[] getMoveTypes() {
  203   		return this.moveTypes;
  204   	}
  205   
  206   	private void setFonts(Font[] fonts) {
  207   		int num = Math.min(this.index, fonts.length);
  208   
  209   		for (int i = 0; i < num; i++) {
  210   			this.scrollLabels[i].setFont(fonts[i]);
  211   		}
  212   	}
  213   
  214   	private Font[] getFonts() {
  215   		Font[] fonts = new Font[this.index];
  216   		for (int i = 0; i < this.index; i++) {
  217   			fonts[i] = this.scrollLabels[i].getFont();
  218   		}
  219   		return fonts;
  220   	}
  221   
  222   	public void setFontNames(String[] names) {
  223   		int num = Math.min(this.index, names.length);
  224   
  225   		for (int i = 0; i < num; i++) {
  226   			Font oldfont = this.scrollLabels[i].getFont();
  227   			Font font = new Font(names[i],
  228   								 oldfont.getStyle(), oldfont.getSize());
  229   			this.scrollLabels[i].setFont(font);
  230   		}
  231   	}
  232   
  233   	public String[] getFontNames() {
  234   		String[] names = new String[this.index];
  235   		for (int i = 0; i < this.index; i++) {
  236   			Font font = this.scrollLabels[i].getFont();
  237   			names[i] = font.getFontName();
  238   		}
  239   		return names;
  240   	}
  241   
  242   	public void setFontStyles(int[] styles) {
  243   		int num = Math.min(this.index, styles.length);
  244   
  245   		for (int i = 0; i < num; i++) {
  246   			Font oldfont = this.scrollLabels[i].getFont();
  247   			Font font = new Font(oldfont.getFontName(),
  248   								 styles[i], oldfont.getSize());
  249   			this.scrollLabels[i].setFont(font);
  250   		}
  251   	}
  252   
  253   	public int[] getFontStyles() {
  254   		int[] styles = new int[this.index];
  255   		for (int i = 0; i < this.index; i++) {
  256   			Font font = this.scrollLabels[i].getFont();
  257   			styles[i] = font.getStyle();
  258   		}
  259   		return styles;
  260   	}
  261   
  262   	public void setFontSizes(int[] sizes) {
  263   		int num = Math.min(this.index, sizes.length);
  264   
  265   		for (int i = 0; i < num; i++) {
  266   			Font oldfont = this.scrollLabels[i].getFont();
  267   			Font font = new Font(oldfont.getFontName(),
  268   								 oldfont.getStyle(), sizes[i]);
  269   			this.scrollLabels[i].setFont(font);
  270   		}
  271   	}
  272   
  273   	public int[] getFontSizes() {
  274   		int[] sizes = new int[this.index];
  275   		for (int i = 0; i < this.index; i++) {
  276   			Font font = this.scrollLabels[i].getFont();
  277   			sizes[i] = font.getSize();
  278   		}
  279   		return sizes;
  280   	}
  281   
  282   	public void setBackgroundColors(Color[] bgColors) {
  283   		int num = Math.min(this.index, bgColors.length);
  284   
  285   		for (int i = 0; i < num; i++) {
  286   			this.scrollLabels[i].setBackground(bgColors[i]);
  287   		}
  288   	}
  289   
  290   	public Color[] getBackgroundColors() {
  291   		Color[] colors = new Color[this.index];
  292   		for (int i = 0; i < this.index; i++) {
  293   			colors[i] = this.scrollLabels[i].getBackground();
  294   		}
  295   		return colors;
  296   	}
  297   
  298   	public void setSize(int width, int height) {
  299   		if (width != 0 && height != 0) {
  300   			this.xsize = width;
  301   			this.ysize = height;
  302   		}
  303   		super.setSize(width, height);
  304   	}
  305   
  306   	private void setOffset(int index) {
  307   		Dimension dim = this.scrollLabels[index].getPreferredSize();
  308   		this.scrollWidth = dim.width;
  309   		this.scrollHeight = dim.height;
  310   		if (this.moveTypes[index].equalsIgnoreCase(DOWN)) {
  311   			this.xOffset = (this.xsize - this.scrollWidth) / 2;
  312   			this.yOffset = 0;
  313   			return;
  314   		}
  315   
  316   		if(this.moveTypes[index].equalsIgnoreCase(UP)) {
  317   			this.xOffset = (this.xsize - this.scrollWidth) / 2;
  318   			this.yOffset = this.ysize;
  319   			return;
  320   		}
  321   
  322   		if(this.moveTypes[index].equalsIgnoreCase(LEFT)) {
  323   			this.xOffset = this.xsize;
  324   			this.yOffset = (this.ysize - this.scrollLabels[index].getPreferredSize().height) / 2;
  325   			return;
  326   		}
  327   		
  328   		if(this.moveTypes[index].equalsIgnoreCase(RIGHT)) {
  329   			this.xOffset = - this.scrollWidth;
  330   			this.yOffset = (this.ysize - this.scrollLabels[index].getPreferredSize().height) / 2;
  331   		}
  332   	}
  333   	
  334       public void start() {
  335           if (this.runner == null) {
  336               this.runner = new Thread(this);
  337               this.runner.start();
  338           }
  339   		this.running = true;
  340       }
  341   	
  342       public void stop() {
  343   		this.running = false;
  344   		this.runner = null;
  345       }
  346   	
  347       public void run() {
  348           long l = System.currentTimeMillis();
  349   		setOffset(this.currentIndex);
  350           while (true) {
  351   			Thread.currentThread().yield();
  352   			if (!this.running) {
  353   				break;
  354   			}
  355               try {
  356   				l += this.delay;
  357   				this.runner.sleep(Math.max(0L, l - System.currentTimeMillis()));
  358   			} catch(InterruptedException _ex) {
  359   			}
  360   			updateLocation();
  361   			repaint();
  362           }
  363       }
  364   
  365   	private void updateLocation() {
  366   		Component comp = this.scrollLabels[this.currentIndex];
  367   		comp.setLocation(this.xOffset, this.yOffset);
  368   		if (this.textChanged) {
  369   			if (getComponentCount() > 0) {
  370   				remove(0);
  371   			}
  372   			comp.setSize(comp.getPreferredSize());
  373   			comp.setVisible(true);
  374   			add(comp, 0);
  375   			this.textChanged = false;
  376   		}
  377   		
  378           if (this.moveTypes[this.currentIndex].equalsIgnoreCase(DOWN)) {
  379               this.yOffset += this.yspeed;
  380           } else if (this.moveTypes[this.currentIndex].equalsIgnoreCase(UP)) {
  381               this.yOffset -= this.yspeed;
  382           } else if (this.moveTypes[this.currentIndex].equalsIgnoreCase(LEFT)) {
  383               this.xOffset -= this.xspeed;
  384           } else if (this.moveTypes[this.currentIndex].equalsIgnoreCase(RIGHT)) {
  385               this.xOffset += this.xspeed;
  386           }
  387           if (this.yOffset > this.ysize + this.scrollHeight ||
  388   			this.yOffset < - this.scrollHeight ||
  389   			this.xOffset > this.xsize ||
  390   			this.xOffset < - this.scrollWidth) {
  391   			comp.setVisible(false);
  392               this.currentIndex++;
  393               if (this.currentIndex >= this.index) {
  394                   this.currentIndex = 0;
  395   			}
  396   			setOffset(this.currentIndex);
  397   			this.textChanged = true;
  398           }
  399   	}
  400   	
  401   	public void paint(Graphics g) {
  402   		Dimension dim = getSize();
  403   		if (this.xsize != dim.width || this.ysize != dim.height) {
  404   			setSize(dim.width, dim.height);
  405   			setOffset(this.currentIndex);
  406   		}
  407   		if (dim.width == 0 || dim.height == 0) {
  408   			return;
  409   		}
  410   		
  411   		g.setColor(this.scrollLabels[this.currentIndex].getBackground());
  412   		g.fillRect(0, 0, this.xsize, this.ysize);
  413   
  414   		super.paint(g);
  415       }
  416   
  417   	protected void paintComponent(Graphics g) {
  418   		//NOP
  419   	}
  420   	
  421       public void update(Graphics g) {
  422           paint(g);
  423       }
  424   }

Save This Page
Home » openjdk-7 » net.jbeans » ui » label » [javadoc | source]