panel.java

来自「soure code for j2me browser」· Java 代码 · 共 832 行 · 第 1/2 页

JAVA
832
字号
			row = (Component)rows.elementAt(pointerPos);			if(row.keyEvent(key)==true)			{				return true;			}		}		int tmpPos;		switch(key)		{			case Canvas.LEFT:				if(!animateDown)				{					if(viewportHeight<internalHeight)					{						scrollCount=FireScreen.SCROLL_COUNT;						animateUp=true;					}				}				break;			case Canvas.RIGHT:				if(!animateUp)				{					if(viewportHeight<internalHeight)					{						scrollCount=FireScreen.SCROLL_COUNT;						animateDown=true;					}				}				break;			case Canvas.UP:				tmpPos = getNextTraversableComponent(pointerPos,false);				if(tmpPos!=-1)				{					pointerPos=tmpPos;					row = (Component)rows.elementAt(pointerPos);					row.keyEvent(key);					recalculateVecticalOffset();					repaint=true;				}				else				{ // the last selected component must remain selected, its more usable this way.					((Component)rows.elementAt(pointerPos)).setSelected(true);					return keyEvent(Canvas.LEFT); // scroll up				}				break;			case Canvas.DOWN:				tmpPos = getNextTraversableComponent(pointerPos,true);				if(tmpPos!=-1)				{					pointerPos=tmpPos;					row = (Component)rows.elementAt(pointerPos);					row.keyEvent(key);					recalculateVecticalOffset();					repaint=true;				}				else				{ 					((Component)rows.elementAt(pointerPos)).setSelected(true);					return keyEvent(Canvas.RIGHT); // scroll down				}				break;			case Canvas.GAME_A:				if(commandListener!=null && leftCmd!=null)				{					if(control.isBusyMode() && cancelCmd!=null) // in busy mode, the cancel command is shown.					{						commandListener.commandAction(cancelCmd,this);						repaint=true;					}					else if(leftPopup==null)					{												commandListener.commandAction(leftCmd,this);						repaint=true;					}					else					{						control.showPopup(leftPopup);					}				}				break;			case Canvas.GAME_B:				if(!control.isBusyMode() && commandListener!=null && rightCmd!=null)				{					if(rightPopup==null)					{						commandListener.commandAction(rightCmd,this);						repaint=true;					}					else					{						control.showPopup(rightPopup);					}				}				break;			case Canvas.FIRE:				break;		}		return repaint;	}		private void recalculateVecticalOffset()	{		int i,tmpHeight=0;				for(i=0;i<=pointerPos;++i)		{			tmpHeight+=((Component)rows.elementAt(i)).getHeight();		}		if(tmpHeight>viewportHeight)		{			int vo  = tmpHeight-viewportHeight;			int diff =(verticalOffset - vo);			if(diff<0 ||  diff>viewportHeight)			{				verticalOffset = vo; 			}		}		else		{			verticalOffset=0;		}		scrollY =(viewportHeight*tmpHeight)/internalHeight ;	}		public void addCommand(Command c)	{		if(c.getCommandType()==Command.BACK)		{			leftCmd = c;			leftPopup=null;		}		else if(c.getCommandType()==Command.CANCEL)		{			cancelCmd = c;			leftPopup=null;		}		else		{			rightCmd = c;			rightPopup=null;		}	}		public void removeCommands()	{			leftCmd = null;			leftPopup=null;			rightCmd = null;			rightPopup=null;	}		public void addCommand(Command popupCmd,Popup popup)	{		popup.setWidth(120);		popup.setHeight(120);		popup.validate();		if(popupCmd.getCommandType()==Command.BACK)		{//			System.out.println("Setting popup to left softkey");//			System.out.println("Width/Height: "+getWidth()+"/"+getHeight());			leftCmd = popupCmd;			leftPopup = popup;			popup.setPosX(1);			popup.setPosY(getHeight()-FireScreen.getBottomOffset()-popup.getHeight());		}		else		{//			System.out.println("Setting popup to right softkey");//			System.out.println("Width/Height: "+getWidth()+"/"+getHeight());			rightCmd = popupCmd;			rightPopup=popup;			popup.setPosX(getWidth()-FireScreen.SCROLLBAR_WIDTH-popup.getWidth()-1);			popup.setPosY(getHeight()-FireScreen.getBottomOffset()-popup.getHeight());		}	}			public void setCommandListener(CommandListener l)	{		commandListener = l;	}	public String getLabel()	{		return labelStr;	}	public void setLabel(String label)	{		labelStr = label; // keep original string for later user (incase of a resize)		int w = FireScreen.defaultLabelFont.stringWidth(label);		int lw=10;		if(FireScreen.defaultLogo!=null)		{			lw += FireScreen.defaultLogo.getWidth();		}		int max = (getWidth()-lw);		if(w<max)		{			this.label = label;			return;		}		// trim label to an acceptable size.		char[] lch = label.toCharArray();		max = max - FireScreen.defaultLabelFont.stringWidth("...");				StringBuffer res = new StringBuffer();		int sum = 0;		for(int i =0;i<lch.length && sum<max;++i)		{			sum+=FireScreen.defaultLabelFont.charWidth(lch[i]);			res.append(lch[i]);		}				this.label = res.toString()+"...";	}	/**	 * Removes all components from this panel. Its does not remove the commands	 *	 */	public void removeAll()	{		animateDown=false;		animateUp = false;		pointerPos=0;		verticalOffset=0;		internalHeight=0;		scrollY=0;		rows = new Vector();	}		/**	 * Kitame an kapoio apo ta components pou fenonte ston panel einai animated.	 * An einai kaloume tin clock() tou kathe enos animated component kai kanoume repaint	 *	 */	public boolean clock()	{		boolean repaint=false;		if(ticker!=null)		{			ticker.clock();			repaint = true;		}		if(animateUp)		{			verticalOffset-=FireScreen.SCROLL_STEP;			--scrollCount;			if(verticalOffset<=0)			{				verticalOffset= 0;				scrollCount=0;				scrollY = control.getTopOffset();			}			if(scrollCount<=0)			{				animateUp=false;			}			return true;		}		if(animateDown)		{			verticalOffset+=FireScreen.SCROLL_STEP;			--scrollCount;			if(verticalOffset>internalHeight-viewportHeight)			{				verticalOffset= internalHeight-viewportHeight;				scrollCount=0;				scrollY =getHeight() - FireScreen.getBottomOffset()-FireScreen.SCROLLBAR_HEIGHT;			}			if(scrollCount<=0)			{				animateDown=false;			}			return true;		}				Component row;		int ypos=0;		int i,htmp;		int height = getHeight();		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.				if(row.isAnimated()){ row.clock();repaint=true;}			}			ypos +=htmp;		}		return repaint;	}	public void internalValidateEvent(Component c)	{		if(control!=null)		{			internalHeight-=c.getHeight();			c.setWidth(getWidth()-FireScreen.SCROLLBAR_WIDTH);			c.validate();			internalHeight +=c.getHeight();			control.repaint();		}	}		public void setCurrent(Displayable d)	{		if(control!=null)		{			control.setCurrent(d);		}	}		public void setContainerCurrent()	{		if(control!=null)		{			control.setContainerCurrent();		}	}		/**	 * 	 * @see gr.bluevibe.fire.components.Component#validate()	 */	public void validate()	{		scrollY = FireScreen.getTopOffset();		animatedChildren=false;		// validate all components		int w = getWidth();		if(ticker!=null)		{			ticker.setWidth(w);			ticker.validate();		}		internalHeight=0;		if(leftPopup!=null)		{			leftPopup.setPosX(1);			leftPopup.setPosY(getHeight()-FireScreen.getBottomOffset()-leftPopup.getHeight());		}		if(rightPopup!=null)		{			rightPopup.setPosX(getWidth()-FireScreen.SCROLLBAR_WIDTH-rightPopup.getWidth()-1);			rightPopup.setPosY(getHeight()-FireScreen.getBottomOffset()-rightPopup.getHeight());		}		int wtmp = w-FireScreen.SCROLLBAR_WIDTH;		for(int i =0 ;i <rows.size();++i)		{			Component c = (Component)rows.elementAt(i);			c.setWidth(wtmp);			c.validate();			internalHeight +=c.getHeight();			if(c.isAnimated())			{				animatedChildren=true;			}		}		setLabel(labelStr); // recalculate label.	}		public boolean isAnimated()	{		if(ticker!=null || animatedChildren || animateDown || animateUp)		{			return true;		}		return false;	}			public void showAlert(String message,Image img)	{		alertText = new Row(img,message); // image on the left, text on the right of the alert.		alertText.setAlignment(FireScreen.LEFT);		alertText.setTextHpos(FireScreen.RIGHT);		alertText.setTextVpos(FireScreen.CENTRE);		alertText.setImageVpos(FireScreen.CENTRE);		alertText.setImageHpos(FireScreen.LEFT);		alertText.setBorder(true);		alertText.setFilled(new Integer(control.getColor()));		alertText.setColor(FireScreen.defaultTickerColor);		alertText.setFont(FireScreen.defaultLabelFont);		alertText.setWidth(getWidth()-FireScreen.SCROLLBAR_WIDTH-(2*FireScreen.ALERT_HORIZONTAL_OFFSET));		alertText.setMinHeight((2*FireScreen.ALERT_VERTICAL_OFFSET));		alertText.validate();		alertMode=true;		control.repaint();	}			public void resetPointer()	{		for(int i =0 ;i<rows.size();++i)		{			((Component)rows.elementAt(i)).setSelected(false);		}		pointerPos = getNextTraversableComponent(-1,true);		if(pointerPos>-1)		{			Component row = ((Component)rows.elementAt(pointerPos));			row.keyEvent(Canvas.DOWN);		}	}}

⌨️ 快捷键说明

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