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

📄 wappage.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;

import java.util.Vector;

import javax.microedition.lcdui.Graphics;

import org.wuhua.wap.log.Logger;
import org.wuhua.wap.ui.core.Platform;

/**
 * <b>类名:WAPPart.java</b> </br> 
 * 编写日期: 2006-12-23 <br/>
 * 程序功能描述:WapPage UI. <br/>
 *
 * Demo: <br/>
 * Bug: <br/>
 * 
 * 程序变更日期 :<br/> 
 * 变更作者 :<br/> 
 * 变更说明 :<br/>
 * 
 * @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a>
 */
public  class WapPage extends Part {
	private static Logger logger = Logger.getLogger("WapPage");
	protected Vector parts;
	protected int numOfEls;
	protected int paintSize = 10;
	protected int startIndex = 0;
	/**
	 * 竖状态
	 */
	private SelectedPart scroll;
	
	/**
	 * 状态条的提示
	 */
	private SelectedPart plan;
	private Part currentPart;
	
	/**
	 * 当前part的行号
	 *
	 */
	private int currentRow;
	
	
	
	public WapPage() {
		super(0, 20, Platform.WIDTH, Platform.HEIGHT -20);
		createScroll();
	}

	private void createScroll() {
		scroll = new SelectedPart();
		scroll.setStyle(0x636364, 0x4C63EF);
		scroll.setHasFocus(true);
		scroll.changePosition(Platform.WIDTH - 6, 20, 4, Platform.HEIGHT - 42);
		plan = new SelectedPart();
		plan.setStyle(0xFFFFFF, 0x000000);
		plan.setHasFocus(true);
		plan.changePosition(Platform.WIDTH - 5, 21, 3, Platform.HEIGHT - 143);
	}

	public void appendParts(Vector parts){
		this.parts = parts;
		this.numOfEls = parts.size();
	}
	public void addItemPart(Part part){
		if(parts == null)
			parts = new Vector();
		parts.addElement(part);
		this.numOfEls = parts.size();
	}
	
	public void onClick(int keyCode) {
		upAndDownAction(keyCode);
		//if (keyCode == Platform.KEY_ENTER) {
			enterAction(keyCode);
		//}
		
	}
	
	private void enterAction(int keyCode) {
		//logger .debug(partChangeListener);
		currentPart.onClick(keyCode);
		
		
	}

	/**
	 * 左列上下动作
	 * @param keyCode
	 */
	private void upAndDownAction(int keyCode) {
		if(this.numOfEls == 0)
			return;
		
		switch (keyCode) {

		case Platform.KEY_UP: {
			selectedIndex--;
			redoHasFocus();
			break;
		}
		case Platform.KEY_DOWN: {
			selectedIndex++;
			undoHasFocus();
			break;
		}
		}

		changeSelectIndex(); 
		setHasFocus();

	}
	
	/** 改变焦点,使用户看起来,他选择的是这个Item 
	 * 设置这个Item的焦点为true,保存他的选择条* */
	private void setHasFocus() {
		currentPart = (Part) parts.elementAt(selectedIndex+startIndex);
		currentPart.hasFocus = true;
		//log.debug("ID=" + selectedIndex);
		//log.debug("selectPosition = " + item.getStartY());
	
	}
	
	/** 改变焦点,使用户看起来,他选择的是这个Item 
	 * 此操作是用户向下时候所需要的操作* */
	private void undoHasFocus() {
		Part part = (Part) parts.elementAt(selectedIndex+this.startIndex-1);
		part.hasFocus = false;
		
		//log.debug("selectPosition = " + item.getStartY());
	
	}

	/** 改变焦点,使用户看起来,他选择的是这个Item ,此方法是用户按向上的按钮时候所要做的工作* */
	private void redoHasFocus() {
		Part part = (Part)parts.elementAt(selectedIndex+startIndex+1);
		part.hasFocus = false;
	}
	

	private void changeSelectIndex() {
		int num = (this.paintSize < numOfEls)?paintSize:numOfEls;//取可显示的菜单项数目
		if (selectedIndex>num-1)
		{
			startIndex++;
			selectedIndex=(byte)(num-1);
		}

		if (selectedIndex < 0)
		{
			if (startIndex>0)
			{
				selectedIndex =0;
				startIndex--;
			}
			else
			{
				startIndex = numOfEls-num;
				selectedIndex=num-1;
			}

		}
		if (startIndex+ selectedIndex > numOfEls -1)
		{
			startIndex= 0;
			selectedIndex = 0;
		}
		
		
	}

	public void paint(Graphics g) {
		paintHypers(g);
	}

	private void paintHypers(Graphics g) {
		int height = 22;
 
		for(int i =0; i < this.numOfEls; i++){
			height =  paintPartImpl(g, height, i);
		}
		
	}

	/**
	 * 具体绘制.绘制是通过判断此控件是否是下一行,如果是则换行,否则不
	 */
	private int paintPartImpl(Graphics g, int height, int i) {
		Part part = (Part) parts.elementAt(i);
		part.setPartChangeListener(partChangeListener);
		if(part.isNextRow()){
			part.changePosition(0, height  , 0, 0);			 
			height = height + part.getHeight();
		}else{
			
			Part back = (Part) parts.elementAt(i-1);
			part.changePosition(back.getWidth(), back.getView()[Y]  , 0, 0);	
			//logger.debug(back.getWidth());
			//logger.debug(back.getView()[Y]); 
		}
		
		part.paint(g);
		return height;
	}

	public int getHeight() {
		 
		return 0;
	}
	public int getWidth() {
		return font.stringWidth(text);
	}
	
	
	public Part getPart(){
		return this.currentPart;
	}
	 
	 
}

⌨️ 快捷键说明

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