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

📄 messagedialog.java

📁 j2me开发的1个简单的wap浏览器.程序框架还是不错的.包括对低级事件的处理.通信框架,标签的解析
💻 JAVA
字号:
/********************************************************************
 * 项目名称				:<b>j2me学习 J2me Wap Explorer</b>			<br/>
 * 
 * Copyright 2005-2006 Wuhua. All rights reserved </br>
 *
 * 本程序只用于学习目的,不能用于商业目的。如有需要请联系作者
 ********************************************************************/
package org.wuhua.wap.ui.form;

import java.util.Vector;

import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;

import org.wuhua.wap.log.Logger;
import org.wuhua.wap.ui.Command;
import org.wuhua.wap.ui.SelectedPart;
import org.wuhua.wap.ui.core.Platform;
import org.wuhua.wap.ui.event.CommandListener;
import org.wuhua.wap.util.FontUtil;
import org.wuhua.wap.util.StringUtil;

 

 

 
/**
 * <b>类名:sdf.java</b> </br> 
 * 编写日期: 2006-12-25 <br/>
 * 程序功能描述: <br/>
 * Demo: <br/>
 * Bug: <br/>
 * 
 * 程序变更日期 :<br/> 
 * 变更作者 :<br/> 
 * 变更说明 :<br/>
 * 
 * @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a>
 */
public class MessageDialog extends TextDialog implements CommandListener{
	private static Logger	 logger = Logger.getLogger("MessageDialog");
	
	
	private Command ok;	
	
	private  SelectedPart plan;
	private int  planHeight;
 
	private int contentHeight;
 
	private int viewSize;
	private int space;
	
 
	private Vector content;
	private int selectIndex;
	private int contentY;


	private String message;
	
	public MessageDialog(String _title,String _message, Panel panel,Display display,long _timeOut) {
		super(_title,  panel, display, _timeOut);
		ok = new Command("确定",Command.LEFT, Command.FIRST_PRIORITY);
		this.addCommand(ok);
		this.setSoftButtonListener(this);
		this.setMessage(_message);
		//initView();
		 
		this.setType(Dialog.DIALOG_OK);
	}
	
	public void setMessage(String message){
		this.message = message;
		skipMessage(message);
	}
	public void setCommandName(String name){
		ok.setName(name);
	}

	private void skipMessage(String message) {
		
		if(message == null)
			return ;
		
		content = new Vector();
		String[] text = StringUtil.split(message, "\n");
		
	    for(int j =0; j < text.length; j++){
	     
	    	String[] t = FontUtil.splitOnlyStringToRowString(font,text[j],view[WIDTH]-6);
	    	for(int i=0; i<t.length; i++){
				content.addElement(t[i]);	 
			}
	    	///content.addElement("");
	    }
		
	    //log.debug(content.size());
	    
	    //new Plan
	 
		
		 
		
		
	}

	protected void keyPressed(int keyCode) {
		super.keyPressed(keyCode);
		this.thisUpAndDown(keyCode);
		this.repaint();
	}
	
	/**
	 * 上下事件
	 * 
	 * @param keyCode
	 */
	private void thisUpAndDown(int keyCode) {
		
		if (this.content == null)
			return;
		
		if(this.content.size() < this.viewSize)
			return;
		
		switch (keyCode) {

		case Platform.KEY_UP: {

			 selectIndex =  selectIndex <= 0 ? content.size() - viewSize - 1
					: --selectIndex;
			// log.debug("Key");
			break;

		}
		case Platform.KEY_DOWN: {
			 selectIndex =  selectIndex >=content.size() - viewSize - 1 ? 0
					: ++selectIndex;
			 //log.debug("Key1");

			break;
		}
		}
	}


	public void commandAction(Command cmd) {
		if(cmd == ok)
			this.cancel();
		
	}
	protected void paint(Graphics g) {
		this.font = g.getFont();
		parent.paint(g);
		drawRGB(g);
		this.softButton.paint(g);
		this.paintMessageDialog(g);
		
	}



	/**
	 * 字体通过事件传播的机制,一层一层的传送下去
	 * @param g
	 */
	private void paintMessageDialog(Graphics g) {
		this.font = g.getFont();
		initView();
		g.setColor(0xFFD84F); //
		g.drawRect(view[X]-1,view[Y]-1,view[WIDTH]+1,view[HEIGHT]+1);
		
		paintTitleImpl(g);
		paintContent(g);
		paintState(g);
	}
	
	private void paintTitleImpl(Graphics g) {
		g.setColor(this.bgColor);
		g.fillRect(view[X],view[Y],view[WIDTH],font.getHeight() + 2);
		g.setColor(this.fontColor);
		g.drawString(title, view[X] + 4, view[Y] + 1,Graphics.TOP|Graphics.LEFT);
	}
	

	
	private void paintContent(Graphics g) {
	    if(content.size() > viewSize ){
		    	this.plan = new SelectedPart();
		    	plan.setStyle(0x000000, 0x000000);
				this.planHeight = contentHeight/(content.size() - viewSize);
		}
		contentY = view[Y] + font.getHeight() + 4;
		 
		g.setColor(0x001D68);
		g.fillRect(view[X],contentY,view[WIDTH],contentHeight);
 
		paintContentImpl(g);
		
	}
	
	public void setStyle(int bgColor, int fontColor){
		this.bgColor = bgColor;
		this.fontColor = fontColor;
		this.softButton.setStyle(bgColor, fontColor);
	}
	private void paintContentImpl(Graphics g) {
		if(content == null)
			return ;
	
		int size = viewSize>content.size()?content.size():viewSize + selectIndex;
		
		g.setColor(0xFFFFFF);
		
		for(int i = selectIndex; i<size; i++){			 
			g.drawString((String) content.elementAt(i),view[X] + 2, contentY + space * (i-selectIndex), Graphics.TOP|Graphics.LEFT);
		}
		
		/**
		 * 绘制状态条
		 */
		if(plan != null){
			//log.debug("SelectIndex = " + selectedIndex);
			plan.changePosition(view[WIDTH] + 4 , contentY + this.planHeight *selectIndex, 4,this.planHeight);
			plan.paint(g);
		}
	}

	private void paintState(Graphics g) {
	    int height = Platform.HEIGHT - 30 - font.getHeight() - 2;
		g.setColor(this.bgColor);
		g.fillRect(view[X], height  ,view[WIDTH],font.getHeight() + 2);
		g.setColor(0xFFFFFF);
		g.drawLine(view[X],height,view[WIDTH] + 10, height);
		g.setColor(this.fontColor);
		
		if(type == Dialog.DIALOG_OK){
			g.drawString(ok.getName(),Platform.WIDTH /2, height + 2,Graphics.HCENTER|Graphics.TOP);
		}else if(type == Dialog.DIALOG_OK_CANCEL){
			 
			g.setColor(0xFFFFFF);
			g.fillRect(view[WIDTH]/2 + view[X] -2, height + 1, 2, font.getHeight() + 1  );
			
			g.setColor(0xFFFFFF);
			g.drawString("确定",view[WIDTH]/4 + view[X], height + 2,Graphics.HCENTER|Graphics.TOP);
			
			g.drawString("取消",view[WIDTH]/4*3 + view[X], height + 2,Graphics.HCENTER|Graphics.TOP);
		 
		}
		
		
	}
	
	
	
	/**
	 * 初始话各个item的位置,以及可以绘制多少个item
	 * 
	 */
	protected void initView() {
		//发现大小改变的时候才重新初始化
		if (view[HEIGHT] < Platform.HEIGHT - 20 - 5 - 4) {
		/*font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
				Font.SIZE_SMALL);*/
			this.skipMessage(message);
			space = font.getHeight();
			view[X] = 10;

			view[Y] = 29;
			view[WIDTH] = Platform.WIDTH - 20;

			view[HEIGHT] = Platform.HEIGHT - 20 - 10 - 29;

			contentHeight = view[HEIGHT] -  (font.getHeight() + 2) * 2;

			viewSize = contentHeight / font.getHeight();
			//log.debug("viewSize = " + viewSize);
 
		}

	}

	 
}

⌨️ 快捷键说明

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