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

📄 row.java

📁 soure code for j2me browser
💻 JAVA
字号:
/* * 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 May 17, 2006 */package gr.bluevibe.fire.components;import gr.bluevibe.fire.displayables.FireScreen;import gr.bluevibe.fire.util.FString;import java.util.Vector;import javax.microedition.lcdui.Canvas;import javax.microedition.lcdui.Font;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;import javax.microedition.lcdui.TextField;public class Row extends Component{	private String id;		private int imageHpos=FireScreen.RIGHT;	private int imageVpos=FireScreen.CENTRE;		private boolean overlay=false;	private int textHpos=FireScreen.LEFT;	private int textVpos=FireScreen.CENTRE;	private int alignment=-1;		private int color=0x00000000;	private Integer bgColor=null;	private boolean border=false;	private boolean editable=false;		private Integer filled=null;	private int editableColor=0xFFFFFFFF;			private int textBoxConstrains=TextField.ANY;	private int textBoxSize=160;		protected Image image;	protected Image selectedImage;	protected FString text = new FString();	protected FString label =null;		private int labelVpos=FireScreen.CENTRE;	private Integer forcedTextWidth=null;		public Row()	{	}		public Row(String txt,Image img)	{		setText(txt);		setImage(img);		setTextHpos(FireScreen.LEFT);		setImageHpos(FireScreen.RIGHT);	}		public Row(Image img)	{		setImage(img);		setImageHpos(FireScreen.LEFT);	}		public Row(String txt)	{		setText(txt);		setTextHpos(FireScreen.LEFT);	}		public Row(Image img,String txt)	{		setText(txt);		setImage(img);		setTextHpos(FireScreen.RIGHT);		setImageHpos(FireScreen.LEFT);	}		public void paint(Graphics g)	{		int imWidth =0;		int width = getWidth();		int  height = getHeight();				int alignOffset=0;				if(filled!=null)		{			g.setColor(filled.intValue());			g.fillRect(0,0,width,height);		}				if(image!=null)		{			imWidth = image.getWidth();		}		int internalWidth = imWidth+text.getWidth()+6;		int labelOffset=0;		if(label!=null) labelOffset =label.getWidth();				width = width - labelOffset;							if(alignment!=-1 && (internalWidth)<width)		{			if(alignment==FireScreen.LEFT)			{				alignOffset=0;			}			if(alignment==FireScreen.CENTRE)			{				alignOffset=(width-internalWidth)/2;			}			if(alignment==FireScreen.RIGHT)			{				alignOffset=(width-internalWidth);			}		}		// draw Image		if(image!=null)		{			int offx = imWidth/2,offy=image.getHeight()/2;			int x=0,y=0;			if(imageHpos==FireScreen.CENTRE) x = internalWidth/2 - offx;  			else if(imageHpos==FireScreen.LEFT) x=0;			else if(imageHpos==FireScreen.RIGHT) x=internalWidth-offx-offx;						if(imageVpos==FireScreen.CENTRE) y = height/2-offy; 			else if(imageVpos==FireScreen.TOP) y= 0;			else if(imageVpos==FireScreen.BOTTOM) y=height-offy-offy;			if(!isSelected() || !isTraversable()) 			{				g.drawImage(image,labelOffset+alignOffset+x,y,Graphics.TOP|Graphics.LEFT);			}			else 			{				if(selectedImage!=null)				{					g.drawImage(selectedImage,labelOffset+alignOffset+x,y,Graphics.TOP|Graphics.LEFT);				}				else				{					g.drawImage(image,labelOffset+alignOffset+x,y,Graphics.TOP|Graphics.LEFT);				}			}		}		 // draw text.		int offx = (text.getWidth()/2)+3,offy=text.getHeight()/2;		int x=0,y=0;		if(textHpos==FireScreen.CENTRE) x = internalWidth/2 - offx;		else if(textHpos==FireScreen.LEFT) x=0;		else if(textHpos==FireScreen.RIGHT) x=internalWidth-offx-offx;				if(textVpos==FireScreen.CENTRE) y = height/2-offy; 		else if(textVpos==FireScreen.TOP) y= 0;		else if(textVpos==FireScreen.BOTTOM) y=height-offy-offy;		g.setFont(text.getFont());		Vector lines = text.getFormatedText();		int rowHeight = text.getRowHeight();		int txtCol;		Integer bgCol = null;		if(isSelected() && isTraversable())		{			bgCol = FireScreen.selectedLinkBgColor;			txtCol = FireScreen.selectedLinkColor;		}		else  		{			bgCol = bgColor;			txtCol = color;		}				if(editable)		{			int fw = text.getWidth()+3;			if(fw==0)			{				fw = width;			}			g.setColor(editableColor);			int ey = (height - text.getHeight()-2)/2;			if(ey<0) ey=0;			g.fillRect(labelOffset+alignOffset+x+1,ey+1,fw-2,text.getHeight());				}		for(int i =0 ;i<lines.size();++i)		{			String tmp = (String)lines.elementAt(i);			String str="";			if(textBoxConstrains==TextField.PASSWORD)			{				// just draw a string of starts				for(int j=0;j<tmp.length();++j)				{					str+="*";				}			}			else			{				str = tmp;			}			if(bgCol!=null)			{				g.setColor(bgCol.intValue());				g.fillRect(labelOffset+alignOffset+x+2,y+1+(i*(rowHeight+FString.LINE_DISTANCE)),text.getRowWidth(str),rowHeight-1);			}			g.setColor(txtCol);			g.drawString(str,labelOffset+alignOffset+x+3,y+(i*(rowHeight+FString.LINE_DISTANCE))+1,Graphics.TOP|Graphics.LEFT);		}				if(editable)		{			int fw = text.getWidth()+3;			if(fw==0)			{				fw = width;			}			int ey = (height - text.getHeight()-2)/2;			if(ey<0) ey=0;			if(isSelected())			{							if(bgCol!=null)					g.setColor(0x00000000);//bgCol.intValue());				g.drawRect(labelOffset+alignOffset+x-1,ey-1,fw+2,text.getHeight()+4);			}			g.setColor(0x00000000);			g.drawRect(labelOffset+alignOffset+x+1,ey+1,fw-2,text.getHeight());		}				if(label!=null)		{			 // draw label			offx = label.getWidth()/2;			offy=label.getHeight()/2;			x=0;						if(labelVpos==FireScreen.CENTRE) y = height/2-offy; 			else if(labelVpos==FireScreen.TOP) y= 0;			else if(labelVpos==FireScreen.BOTTOM) y=height-offy-offy;			g.setFont(label.getFont());			lines = label.getFormatedText();			rowHeight = label.getRowHeight();						Integer labelBgCol = bgColor;			int labelTxtCol = color;			for(int i =0 ;i<lines.size();++i)			{				String str = (String)lines.elementAt(i);								if(labelBgCol!=null)				{					g.setColor(labelBgCol.intValue());					g.fillRect(x+1,y+1+(i*(rowHeight+FString.LINE_DISTANCE)),label.getRowWidth(str),rowHeight);				}				g.setColor(labelTxtCol);				g.drawString(str,x+3,y+2+(i*(rowHeight+FString.LINE_DISTANCE)),Graphics.TOP|Graphics.LEFT);			}		}		if(border)		{			g.setColor(FireScreen.defaultBorderColor);			g.drawRect(0,0,width-1,height-1);		}	}		private void showTextBox()	{		RowTextBox b = new RowTextBox(this);		setCurrent(b);	}		void textUpdate(String text)	{		setText(text);		fireValidateEvent();		setContainerCurrent();		generateEvent();	}		public boolean pointerEvent(int x, int y)	{		return keyEvent(Canvas.FIRE);	}		public boolean keyEvent(int key)	{			if(key==Canvas.FIRE)		{			if(isEditable())			{				showTextBox();				return false;			}			else			{				return generateEvent();			}		}		else if(key==Canvas.UP || key==Canvas.DOWN)		{			setSelected(!isSelected());			return isSelected();		}		return false; // any other key exits focus	}	public Image getImage()	{		return image;	}	public void setImage(Image image)	{		this.image = image;	}	public int getImageHpos()	{		return imageHpos;	}	public void setImageHpos(int imageHpos)	{		this.imageHpos = imageHpos;	}	public int getImageVpos()	{		return imageVpos;	}	public void setImageVpos(int imageVpos)	{		this.imageVpos = imageVpos;	}	public boolean isOverlay()	{		return overlay;	}	public void setOverlay(boolean overlay)	{		this.overlay = overlay;	}	public Image getSelectedImage()	{		return selectedImage;	}	public void setSelectedImage(Image selectedImage)	{		this.selectedImage = selectedImage;	}	public void setText(String text)	{		if(text!=null && textBoxSize<text.length()) 		{			textBoxSize = text.length();		}				this.text.setText(text);	}		public String getText()	{		return this.text.getText();	}		public Font getFont()	{		return this.text.getFont();	}	public void setFont(Font f)	{		this.text.setFont(f);	}		public int getTextHpos()	{		return textHpos;	}	public void setTextHpos(int textHpos)	{		this.textHpos = textHpos;	}	public int getTextVpos()	{		return textVpos;	}	public void setTextVpos(int textVpos)	{		this.textVpos = textVpos;	}		public void validate()	{		int minW=0;		// kitame to image.		int textWidth=0;		int imWidth = 0;		int imHeight = 0;				int width = getWidth()-FireScreen.SCROLLBAR_WIDTH;		if(label!=null)		{			width -=label.getWidth();			minW += label.getWidth();		}		if(image!=null)		{			imWidth = image.getWidth();			imHeight = image.getHeight();			minW += image.getWidth();			if(overlay==false)			{				if(imageHpos==FireScreen.CENTRE)				{					textWidth = width/2 - imWidth/2;				}				else				{					textWidth = width - imWidth;				}				if(textWidth<=0) // den mporoume na zografisoume to keimeno dipla stin eikona 				{ // opote pame anagastika se overlay.					setOverlay(true);				}			}			if(overlay)			{				textWidth = width;			}		}		else		{			textWidth=width;		}				if(forcedTextWidth!=null) 		{			int ftw = forcedTextWidth.intValue();			if(ftw>textWidth) // to textWidth einai to megisto pou xoraei, 			{							// an to forced einai megalitero tha vgenei ekso apo tin othoni				ftw = textWidth;			}			text.format(ftw,true);		}		else		{			text.format(textWidth,false);		}		minW +=text.getWidth()+6;		int textHeight = text.getHeight()+2;				int myHeight = 0;		if(textHeight>imHeight) myHeight=textHeight;		else myHeight=imHeight;		if(label!=null && myHeight <label.getHeight())		{			myHeight = label.getHeight();		}		if(editable)		{			myHeight+=4;		}		setHeight(myHeight);				if(getMinHeight()>getHeight())		{			setHeight(getMinHeight());		}		setMinWidth(minW);	}	public Integer getBgColor()	{		return bgColor;	}	public void setBgColor(Integer bgColor)	{		this.bgColor = bgColor;	}	public int getColor()	{		return color;	}	public void setColor(int color)	{		this.color = color;	}	public int getAlignment()	{		return alignment;	}	public void setAlignment(int alignment)	{		this.alignment = alignment;	}	public boolean isBorder()	{		return border;	}	public void setBorder(boolean border)	{		this.border = border;	}	public Integer getFilled()	{		return filled;	}	public void setFilled(Integer filled)	{		this.filled = filled;	}	public boolean isEditable()	{		return editable;	}	public void setEditable(boolean editable)	{		this.editable = editable;		if(editable)		{			setMinHeight(text.getFont().getHeight()+2);		}	}	public int getTextBoxConstrains()	{		return textBoxConstrains;	}	public void setTextBoxConstrains(int textBoxConstrains)	{		this.textBoxConstrains = textBoxConstrains;	}	public int getTextBoxSize()	{		return textBoxSize;	}	public boolean isTraversable()	{		if(!editable)		{ 			return super.isTraversable();		}		// an to row einai editable einia panta traversable.		return true;	}	public void setTextBoxSize(int textBoxSize)	{		this.textBoxSize = textBoxSize;	}	public String getId()	{		return id;	}		public void setLabel(String labelStr,Font labelFont,Integer width,int labelVpos)	{		label = new FString();		label.setText(labelStr);		if(labelFont!=null)		{			label.setFont(labelFont);		}		if(width!=null)		{			label.format(width.intValue(),true);					}		else		{ // calculate width.			int w = label.getFont().stringWidth(labelStr);			label.format(w,true);			label.setWidth(label.getWidth()+4); 		}		this.labelVpos = labelVpos;	}	public void setId(String id)	{		this.id = id;	}	public Integer getForcedTextWidth()	{		return forcedTextWidth;	}	public void setForcedTextWidth(Integer forcedTextWidth)	{		this.forcedTextWidth = forcedTextWidth;	}}

⌨️ 快捷键说明

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