⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 panel.java

📁 soure code for j2me browser
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * Fire (Flexible Interface Rendering Engine) is a set of graphics widgets for creating GUIs for j2me applications.  * Copyright (C) 2006  Bluebird co (www.bluebird.gr) * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. *  *  * This library 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 * Lesser General Public License for more details. *  * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA *  *//* * Created on Aug 25, 2006 */package gr.bluevibe.fire.components;import gr.bluevibe.fire.displayables.FireScreen;import gr.bluevibe.fire.util.CommandListener;import gr.bluevibe.fire.util.ComponentListener;import gr.bluevibe.fire.util.Lang;import java.util.Vector;import javax.microedition.lcdui.Canvas;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Font;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;public class Panel extends Component implements ComponentListener{		/* Components */	private FTicker ticker;	protected Vector rows = new Vector();		private Command cancelCmd=null;		private Command leftCmd,rightCmd;	private Popup leftPopup,rightPopup;	private CommandListener commandListener;			private String label = FireScreen.defaultLabel;	private String labelStr = FireScreen.defaultLabel;		/* Support vars */		protected FireScreen control=null;		protected int internalHeight=0;	protected int verticalOffset=0;	protected int pointerPos=-1;	protected int viewportHeight=0;		protected int scrollY;	protected boolean animateUp=false;	protected boolean animateDown = false;	private int scrollCount = 0;		private boolean alertMode=false;	private Row alertText = null;	private boolean animatedChildren=false;			public Panel()	{		control = FireScreen.getScreen(null); // get Singleton FireScreen.		setWidth(control.getWidth());		setHeight(control.getHeight());	}		public void paint(Graphics g)	{		// zogragizo ta giro giro.		Image bgImage = control.getBgImage();		if(bgImage!=null)		{			g.drawImage(bgImage,0,0,Graphics.TOP|Graphics.LEFT);		}		int tickerClip = 0;		if(ticker!=null)		{ 			tickerClip = FireScreen.defaultTickerFont.getHeight();		}		int topOffset = FireScreen.getTopOffset();		int bottomOffset = FireScreen.getBottomOffset();		viewportHeight = (getHeight()-bottomOffset-topOffset-tickerClip);		int ypos=topOffset;		int htmp=0;		Component row;		int width = getWidth();		int height = getHeight();		int i;		if(ticker!=null)		{			htmp = ticker.getHeight();			int trY = topOffset;			int clipYa=0;			int clipYb=htmp;			g.translate(-g.getTranslateX(),-g.getTranslateY());			g.translate(0,trY);			g.setClip(0,clipYa,width-FireScreen.SCROLLBAR_WIDTH,clipYb);			ticker.paint(g);			ypos+=htmp;		}		for(i =0 ;i<rows.size() && ypos<(verticalOffset+height);++i)		{			row = (Component)rows.elementAt(i);			htmp = row.getHeight();			if(ypos+htmp>verticalOffset)			{ // arxizoume na zografizoume apo auto edo to row.								int trY = ypos-verticalOffset;				int clipYa=0;				if(trY<(topOffset+tickerClip))				{					clipYa = topOffset+tickerClip - trY;				}				int clipYb=htmp-clipYa;								if(trY+htmp>viewportHeight)				{					clipYb = clipYb - ((trY+htmp)-(height-bottomOffset)); 				}								g.translate(-g.getTranslateX(),-g.getTranslateY());				g.translate(0,trY);				g.setClip(0,clipYa,width-FireScreen.SCROLLBAR_WIDTH,clipYb);				row.paint(g);			}			ypos +=htmp;		}		/* Zografizoume ta ypolipa komatia tou interface. */		g.translate(-g.getTranslateX(),-g.getTranslateY());		g.setClip(0,0,width,height);						if(internalHeight>viewportHeight)		{			if(animateDown || animateUp)			{				scrollY = (((verticalOffset+viewportHeight/2) * viewportHeight)/internalHeight) + topOffset;			}						if(scrollY<topOffset) scrollY=topOffset;			if(scrollY>(getHeight()-bottomOffset-FireScreen.SCROLLBAR_HEIGHT)) scrollY = height-bottomOffset-FireScreen.SCROLLBAR_HEIGHT;						g.setColor(FireScreen.defaultScrollColor);			g.fillRect(width-FireScreen.SCROLLBAR_WIDTH+3,scrollY,FireScreen.SCROLLBAR_WIDTH-3,FireScreen.SCROLLBAR_HEIGHT);		}		Font labelFont = control.getLabelFont();				g.setFont(labelFont);		g.setColor(FireScreen.defaultLabelColor);		int lhpos = height-(((bottomOffset-2)/2)+(labelFont.getHeight()/2));		if(control.isBusyMode() && cancelCmd!=null)		{ // draw the cancel command			String str = control.getLeftSoftKeyShortcut()+cancelCmd.getLabel();			g.drawString(str,2,lhpos,Graphics.TOP|Graphics.LEFT);					}		else		{			if(leftCmd!=null)			{				String str = control.getLeftSoftKeyShortcut()+leftCmd.getLabel();				g.drawString(str,2,lhpos,Graphics.TOP|Graphics.LEFT);			}					if(rightCmd!=null)			{				String str = control.getRightSoftKeyShortcut()+rightCmd.getLabel();				g.drawString(str,width-labelFont.stringWidth(str)-3,lhpos,Graphics.TOP|Graphics.LEFT);			}		}		if(label!=null)		{			lhpos = (((topOffset-2)/2)-(labelFont.getHeight()/2));			int loff = 4;			if(FireScreen.getLogoPossition()==FireScreen.LEFT)			{				loff= width - labelFont.stringWidth(label)-4;			}			g.drawString(label,loff,lhpos,Graphics.TOP|Graphics.LEFT);		}		if(alertMode)		{			g.translate(FireScreen.ALERT_HORIZONTAL_OFFSET,topOffset+viewportHeight/2-alertText.getHeight()/2);			g.setClip(0,0,alertText.getWidth(),alertText.getHeight());			alertText.paint(g);		}	}	public FTicker getTicker()	{		return ticker;	}	public void setTicker(FTicker ticker)	{		ticker.setWidth(getWidth()-FireScreen.SCROLLBAR_WIDTH);		ticker.setHeight(FireScreen.defaultTickerFont.getHeight());		ticker.validate();		this.ticker = ticker;			}		public synchronized int add(Component cmp)	{		if(cmp.isAnimated())		{			animatedChildren=true;		}				rows.addElement(cmp);		int id = rows.size()-1;		cmp.set_componentID(id);		cmp.addValidateListener(this);		return id;	}		public int countRows()	{		if(rows!=null) return rows.size();		return 0;	}		public boolean remove(Component cmp)	{		pointerPos=-1;		boolean found =rows.removeElement(cmp);		if(found) internalHeight-=cmp.getHeight();		return found;	}	public void remove(int pos)	{		pointerPos=-1;		if(pos>=0 && pos<rows.size())		{			Component c = (Component)rows.elementAt(pos);			internalHeight-=c.getHeight();			rows.removeElementAt(pos);		}	}		public boolean pointerEvent(int x, int y)	{		if(alertMode)		{			alertMode=false;			alertText=null;			return true;		}				int height = getHeight();		int width = getWidth();				int topOffset = FireScreen.getTopOffset();				if(ticker!=null) topOffset+=ticker.getHeight();				if(y>height-FireScreen.getBottomOffset())		{ // event sto command bar (bottom border)			if(leftCmd!=null)			{				if(x<=(FireScreen.defaultLabelFont.stringWidth(leftCmd.getLabel())+2))				{					return keyEvent(Canvas.GAME_A);				}			}			if(rightCmd!=null)			{				if(x>=(width-FireScreen.defaultLabelFont.stringWidth(rightCmd.getLabel())-2))				{					return keyEvent(Canvas.GAME_B);				}			}		}		else if(y>topOffset && x<width-FireScreen.SCROLLBAR_WIDTH)		{ // event se kapoio component tou Panel			int i,tmpHeight=0;			Component c=null;			for(i=0;i<rows.size();++i)			{				c=(Component)rows.elementAt(i);				tmpHeight+=c.getHeight();				if((tmpHeight-verticalOffset+topOffset)>=y) break;			}			if(pointerPos==i) // fire event.			{				tmpHeight = tmpHeight-c.getHeight();							c.pointerEvent(x,y+verticalOffset-tmpHeight-topOffset);				return true;			}			if(i==rows.size())			{ // no component in tap location.				return true;			}						// selection event.			if(pointerPos>=0)			{ // deselect old selected component				Component old = (Component)rows.elementAt(pointerPos);				old.setSelected(false);			}			pointerPos=i;			Component sel = (Component)rows.elementAt(pointerPos);			sel.setSelected(true);			sel.pointerEvent(x,y+verticalOffset-tmpHeight-topOffset);			return true;		}		else if(internalHeight>viewportHeight)		{ // scrollbar action.			if(y>scrollY) 			{				return keyEvent(Canvas.RIGHT);			}			if(y<scrollY)			{				return keyEvent(Canvas.LEFT);			}		}		return false;	}		private int getNextTraversableComponent(int pointer,boolean down)	{		int end;		if(down)		{			end = rows.size();			for(int i=(pointer+1);i<end;++i)			{				Component c = (Component)rows.elementAt(i);				if(c.isTraversable()) return i;			}		}		else		{			for(int i=(pointer-1);i>-1;--i)			{				Component c = (Component)rows.elementAt(i);				if(c.isTraversable()) return i;			}		}		return -1;	}	public boolean keyEvent(int key)	{				if(alertMode)		{			alertMode=false;			alertText=null;			return true;		}		//if(rows.size()==0) return false;		boolean repaint=false;				Component row=null;		if((key==Canvas.UP || key==Canvas.DOWN) && pointerPos==-1)		{			int h =0;			int i;			for(i =0;i<rows.size() && h<verticalOffset;++i)			{				h += ((Component)rows.elementAt(i)).getHeight();			}			pointerPos = getNextTraversableComponent(i-1,true);			if(pointerPos>-1)			{				row = ((Component)rows.elementAt(pointerPos));				row.keyEvent(key);				recalculateVecticalOffset();			}			else			{				if(key==Canvas.UP)				{ 					return keyEvent(Canvas.LEFT);				}				else if(key==Canvas.DOWN)				{					return keyEvent(Canvas.RIGHT);				}			}			return true;		}		else if(pointerPos!=-1 && key!=Canvas.GAME_A && key!=Canvas.GAME_B) 		{

⌨️ 快捷键说明

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