亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? softbutton.java

?? j2me開發的1個簡單的wap瀏覽器.程序框架還是不錯的.包括對低級事件的處理.通信框架,標簽的解析
?? JAVA
字號:
/********************************************************************
 * 項目名稱				:<b>足球項目j2me客戶端</b>			<br/>
 * 
 * Copyright 2005-2006 Teesoo. All rights reserved
 ********************************************************************/
package org.wuhua.wap.ui;

import java.util.Vector;

import javax.microedition.lcdui.Graphics;

import org.wuhua.wap.Resources;
import org.wuhua.wap.log.Logger;
import org.wuhua.wap.ui.core.Platform;
import org.wuhua.wap.ui.event.CommandListener;
import org.wuhua.wap.util.GraphicsUtil;

/**
 * <b>類名:SoftButton.java</b> </br> 編寫日期: 2006-9-14 <br/> 
 * 程序功能描述: 個人認為這里的代碼設計的不好,重復代碼過多,應該重構,應該把那些命令的繪制當做一個容器來管理<br/> Demo:
 * <br/> Bug: <br/>
 * 
 * 程序變更日期 :<br/> 變更作者 :<br/> 變更說明 :<br/>
 * 
 * @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a>
 */
public class SoftButton extends Part {
	Logger logger = Logger.getLogger("SoftButton");

	/** 軟鍵 * */

	private CommandListener commandListener;

	private Vector left;

	private Command right;

	private Command middle;

	private boolean isSelectLeftCmd;
	private boolean isSelectLeftCmdItem;
	
	private int leftCmdItemIndex;
	private int leftItemIndexStart;

	private int leftCmdIndex;

	private int numOfEls;
	private int itemNumOfEls;

	private int startIndex;

	private int paintSize = 5;
	private int itemPaintSize = 5;
	private Command currentCmd;
	
	private SelectedPart selected;
	
    private String menu = "菜單";
    private String select = "選擇";
    private String cancel = "取消";
	/**
	 * 構造固定位置的軟鍵條
	 * 
	 */
	public SoftButton() {
		super(0, Platform.HEIGHT - 20, Platform.WIDTH, Platform.HEIGHT);
		selected = new SelectedPart();
	}

	/**
	 * 添加一列,我的想法是讓左列軟件可以多個
	 * 
	 * @param item
	 */
	public void addCommand(Command cmd) {
		if (cmd.type == Command.LEFT)
			addCommandLeftImpl(cmd);
		else if (cmd.type == Command.RIGHT) {
			this.right = cmd;
		} else if (cmd.type == Command.MIDDLE) {

			this.middle = cmd;
		}

	}

	/**
	 * 推進去
	 * 
	 * @param cmd
	 */
	private void addCommandLeftImpl(Command cmd) {
		if (left == null)
			left = new Vector();
		left.addElement(cmd);
		numOfEls = left.size();

	}

	/**
	 * 判斷當前選擇條是否到了底部,經過用戶的選擇,這些選擇條會不斷的變化</br> 變化的依據是當selectPosition >=
	 * viewPart[HEIGHT]*/
	private void changeSelectIndex(){
		int num = (this.paintSize < numOfEls)?paintSize:numOfEls;//取可顯示的菜單項數目
		if (leftCmdIndex>num-1)
		{
			startIndex++;
			leftCmdIndex=(byte)(num-1);
		}

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

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

	// 判斷是否存在這個命令,如果為空,或者標題為""則表示不存在
	private boolean cmdIsExist(Command cmd) {
		if (cmd == null || cmd.equals(""))
			return false;
		else
			return true;

	}

	private void enterAction() {
		if(this.isSelectLeftCmd){
			leftAction();
		}
		
	}

	// 填充cmds區域
	private void fillCmdsClip(Graphics g) {

		if (Platform.HEIGHT - 20 > this.view[HEIGHT]) {
			view[Y] = Platform.HEIGHT - 20;
			view[HEIGHT] = Platform.HEIGHT;
		}
		g.setColor(bgColor);
		g.fillRect(view[X], view[Y], view[WIDTH], view[HEIGHT]);

		g.setColor(0xFFFFFF);
		// 畫條白線
		g.drawLine(view[X], view[Y] - 1, view[WIDTH], view[Y] - 1);

	}

	/**
	 * 填充顏色并且繪制左列菜單出來
	 * 
	 */
	private void fillLeftBackground(Graphics g) {
		int size =  paintSize >  numOfEls?  numOfEls:this.paintSize + startIndex;
		 
		int height = (paintSize>numOfEls?numOfEls:paintSize) * font.getHeight() + 2;
		int width = 60;

		int startY = Platform.HEIGHT - 23 - height;
		
		
		paintCmdNameImpl(g,size,this.startIndex,this.leftCmdIndex,0, startY,width, height,left);
		
		paintLeftCmdItem(g);
	}

	/**
	 * 把那些cmd繪制出來
	 * @param g
	 * @param startX
	 * @param startY
	 * @param items
	 */
	private void paintCmdNameImpl(Graphics g,int size, int startIndex, int selectIndex, int startX, int startY,int width, int height,Vector items) {
		
		GraphicsUtil.drawSreenBorder(g, 0x000000, startX, startY-2, width+3, height+3);
		GraphicsUtil.drawSreenBorder(g, 0xFFFFFF, startX + 1, startY-1 , width+1, height+1);
		GraphicsUtil.fillSreen(g, this.bgColor, startX + 2, startY, width, height);

		// 繪制選擇條
		//GraphicsUtil.fillSreen(g,  0xFFFFF, startX + 2, startY + font.getHeight()*selectedIndex  , 
			//	width, font.getHeight()+2 );
		selected.changePosition(startX + 2, startY + font.getHeight()*selectIndex, width, font.getHeight()+2);
		selected.paint(g);

		g.setColor(fontColor);
		
		

		for(int i =startIndex,j=0; i< size; i++, j++){
			Command cmd;
			if( selectIndex == j){
				cmd = (Command) items.elementAt(selectIndex+startIndex);
			}else{
				cmd = (Command) items.elementAt(i);
			}
			g.drawString(cmd.getName(), startX + 10, startY + 2 + font.getHeight() * j,
					Graphics.TOP | Graphics.LEFT);
			cmd.setHeight(startY + 2 + font.getHeight() * j);
			//繪制箭頭
			if(cmd.hasItem()){
				g.drawImage(Resources.ARROW, font.stringWidth(cmd.getName()) + startX + 20, startY + 2 + font.getHeight() * j + 4,
						Graphics.TOP | Graphics.LEFT);
			}
		}
	}
	

	/**
	 * 繪制CmdItem。
	 * @param g
	 */
	private void paintLeftCmdItem(Graphics g) {
		 
		 if(this.isSelectLeftCmdItem){
			 currentCmd =   (Command)left.elementAt(this.leftCmdIndex + this.startIndex);
			 if(currentCmd.hasItem()){	
				 Vector items = currentCmd.getItems();
				 itemNumOfEls = items.size();
				 int size =  itemPaintSize > itemNumOfEls ? itemNumOfEls:this.itemPaintSize + this.leftItemIndexStart;
				 int height = (itemPaintSize>itemNumOfEls?itemNumOfEls:itemPaintSize) * font.getHeight() + 2;
				 int width = 60;
				 
				
				 paintCmdNameImpl(g,size,this.leftItemIndexStart,this.leftCmdItemIndex,50, currentCmd.getHeight() - 30,width, height,items);
			 }
		 }
		
	}

	/**
	 * 友鍵動作
	 * 
	 */
	private void leftAction() {

		if(left.size() == 1){
			commandListener.commandAction((Command) left.elementAt(0));
			return;
		}
		
		if (isSelectLeftCmd) {
			Command cmd = (Command) left.elementAt(leftCmdIndex  + startIndex);
			if(cmd.hasItem()){
				if(isSelectLeftCmdItem){
					Vector items = cmd.getItems();
					cmd = (Command)items.elementAt(this.leftCmdItemIndex + this.leftItemIndexStart);
					 
					commandListener.commandAction(cmd);
					isSelectLeftCmdItem = false;
				}else{
					isSelectLeftCmdItem = true;
				}
				
			}else{
				commandListener.commandAction(cmd);
			}
			
			logger.debug(cmd.getName());
			
			if(!isSelectLeftCmdItem){
				isSelectLeftCmd = false;
				return;
			} 
		}
		this.isSelectLeftCmd = true;
		 

	}

	/**
	 * 左列上下動作
	 * @param keyCode
	 */
	private void leftUpAndDown(int keyCode) {
		if(!isSelectLeftCmd)
			return;
		if(!isSelectLeftCmdItem)
			leftCmdAction(keyCode); 
		else
			leftCmdItemUpAndDown(keyCode);

	}

	private void leftCmdAction(int keyCode) {
		if(this.numOfEls == 0)
			return;
		switch (keyCode) {

		case Platform.KEY_UP: {
			leftCmdIndex--;
			break;
		}
		case Platform.KEY_DOWN: {
			leftCmdIndex++;

			break;
		}
		}

		changeSelectIndex();
	}
	
	/**
	 * 左列上下動作
	 * @param keyCode
	 */
	private void leftCmdItemUpAndDown(int keyCode) {
		if(this.itemNumOfEls == 0)
			return;
		switch (keyCode) {

		case Platform.KEY_UP: {
			leftCmdItemIndex--;
			break;
		}
		case Platform.KEY_DOWN: {
			leftCmdItemIndex++;
			break;
		}
		}

		changeSelectLeftItmeIndex(); 

	}
	
	

	private void changeSelectLeftItmeIndex() {
		int num = (this.itemPaintSize < itemNumOfEls)?itemPaintSize:itemNumOfEls;//取可顯示的菜單項數目
		if (leftCmdItemIndex>num-1)
		{
			leftItemIndexStart++;
			leftCmdItemIndex=(byte)(num-1);
		}

		if (leftCmdItemIndex < 0)
		{
			if (leftItemIndexStart>0)
			{
				leftCmdItemIndex =0;
				leftItemIndexStart--;
			}
			else
			{
				leftItemIndexStart = itemNumOfEls-num;
				leftCmdItemIndex=num-1;
			}

		}
		if (leftItemIndexStart+ leftCmdItemIndex > itemNumOfEls -1)
		{
			leftItemIndexStart= 0;
			leftCmdItemIndex = 0;
		}
		
	}

	/**
	 * 按鈕的動作
	 */
	public void onClick(int keyCode) {

		if (this.commandListener == null)
			return;

		if (keyCode == Platform.KEY_SOFT_LEFT) {
			leftAction();
		} else if (keyCode == Platform.KEY_SOFT_RIGHT && cmdIsExist(right)) {
			rightAction();
		} else if (keyCode == Platform.KEY_ENTER) {
			enterAction();

		}else if(keyCode == Platform.KEY_UP || keyCode == Platform.KEY_DOWN){
			leftUpAndDown(keyCode);
		}else if(keyCode == Platform.KEY_RIGHT || keyCode == Platform.KEY_LEFT){
		 
			leftItemLeftAndRight(keyCode);
			 
		}

	}

	/**
	 * 左列菜單左右事件
	 * @param keyCode
	 */
	private void leftItemLeftAndRight(int keyCode) {	 
		 currentCmd = (Command) left.elementAt(leftCmdIndex  + startIndex);
		if(!currentCmd.hasItem()
				|| this.numOfEls <=0)
			return;
		switch (keyCode) {

		case Platform.KEY_RIGHT: {
			isSelectLeftCmdItem = true;
			break;
		}
		case Platform.KEY_LEFT: {
			isSelectLeftCmdItem = false;
			this.itemNumOfEls = 0;
			this.leftCmdItemIndex = 0;
			this.leftItemIndexStart = 0;
			break;
		}
		}
	}

	public void paint(Graphics g) {
		//獲取Form的字體,保存到下面
		this.font = g.getFont();
		paintCmdsImpl(g);

	}
	/**
	 * 繪制cmds
	 */
	private void paintCmdsImpl(Graphics g) {
		fillCmdsClip(g);
		paintCmdNames(g);
	}
	
	private void paintCmdNames(Graphics g) {
		g.setFont(this.font);

		g.setColor(fontColor);

		if (left != null) {
			// 如果選擇列表的時候,要繪制取消跟選擇所以就只好return
			if (isSelectLeftCmd) {
				paintLeftImpl(g);
				paintSelectAndCancel(g);
				return;
			} else {
				if(left.size()== 1){
					g.drawString(((Command)left.elementAt(0)).getName(), view[X], view[Y] + (20-font.getHeight())/2, Graphics.LEFT
							| Graphics.TOP);
				}else{
					g.drawString(menu, view[X], view[Y] + (20-font.getHeight())/2, Graphics.LEFT
							| Graphics.TOP);
				}
				
			}
		}

		if (middle != null) {
			g.drawString(middle.name, view[WIDTH] / 2, view[Y] + (20-font.getHeight())/2,
					Graphics.HCENTER | Graphics.TOP);
		}
		if (right != null) {
			g.drawString(right.name, view[WIDTH] - 2, view[Y] + (20-font.getHeight())/2, Graphics.TOP
					| Graphics.RIGHT);
		}
	}



	/**
	 * 繪制菜單的實現
	 * 
	 * @param g
	 */
	private void paintLeftImpl(Graphics g) {
		if (left == null)
			return;
		fillLeftBackground(g);

	}

	/*
	 * 繪制選擇跟取消
	 */
	private void paintSelectAndCancel(Graphics g) {
		g.drawString(select, view[X], view[Y] + (20-font.getHeight())/2, Graphics.LEFT | Graphics.TOP);
		g.drawString(cancel, view[WIDTH] - 2, view[Y] + (20-font.getHeight())/2, Graphics.TOP
				| Graphics.RIGHT);
	}

	/** 刪除相應的Command */
	public void removeCommand(Command cmd) {
		if (cmd.type == Command.LEFT)
			removeCommandLeftImpl(cmd);
		else if (cmd.type == Command.MIDDLE)
			middle = null;
		else if (cmd.type == Command.RIGHT)
			right = null;
	}

	/**
	 * 刪除左列表的cmd,通過查找方式刪除
	 * @param cmd
	 */
	private void removeCommandLeftImpl(Command cmd) {
		boolean ok = false;
		if (left != null)
			ok = left.removeElement(cmd);
		if(ok)
			return;
		else{
			for(int i =0; i < left.size(); i++){
				Command c = (Command) left.elementAt(i);
				if(c.hasItem())
					c.removeCommandItem(cmd);
			}
		}

	}

	private void rightAction() {
		if (isSelectLeftCmd) {
			isSelectLeftCmd = false;
			return;
		}
		commandListener.commandAction(right);
	}

	/**
	 * 注冊監視器
	 */
	public void setCommandListener(CommandListener commandListener) {
		this.commandListener = commandListener;
	}
	
	public void setSelectedStyle(int selectColor){
		this.selected.setStyle(selectColor, fontColor);
	}

	public final void setCancel(String cancel) {
		this.cancel = cancel;
	}

	public final void setMenu(String menu) {
		this.menu = menu;
	}

	public final void setSelect(String select) {
		this.select = select;
	}
	
	public int getHeight() {
		// TODO 自動生成方法存根
		return 0;
	}

	public final boolean isSelectLeftCmd() {
		return isSelectLeftCmd;
	}
	
	public int getWidth() {
		return font.stringWidth(text);
	}
	

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩手机在线导航| 亚洲人123区| 夜夜亚洲天天久久| 国产精品影视网| 欧美日韩一卡二卡三卡| 中文字幕高清不卡| 久久国内精品自在自线400部| 大桥未久av一区二区三区中文| 欧美人与性动xxxx| 亚洲欧美色综合| 成人午夜短视频| 久久久国产精品麻豆| 免费在线看一区| 欧美丝袜丝交足nylons图片| 亚洲欧美一区二区三区孕妇| 国产成人丝袜美腿| 久久综合久久鬼色| 蜜桃一区二区三区四区| 欧美日本一道本| 亚洲国产精品久久艾草纯爱| 91亚洲精品乱码久久久久久蜜桃| 精品三级av在线| 毛片基地黄久久久久久天堂| 欧美理论电影在线| 婷婷综合另类小说色区| 欧美伦理电影网| 午夜久久久久久久久久一区二区| 91麻豆产精品久久久久久 | 国产福利视频一区二区三区| 日韩亚洲电影在线| 久久精品国产在热久久| 欧美一级xxx| 捆绑调教美女网站视频一区| 91精品国产综合久久小美女| 日韩在线一区二区三区| 欧美电视剧免费全集观看| 久久99最新地址| 久久久久亚洲综合| 国产成人啪免费观看软件| 国产亚洲婷婷免费| 99视频有精品| 亚洲午夜精品一区二区三区他趣| 欧美日韩精品一区二区| 美女视频免费一区| 国产日韩精品一区| 色一情一伦一子一伦一区| 午夜精品久久久久久久| 91精品国产91久久久久久一区二区 | av毛片久久久久**hd| 亚洲天堂久久久久久久| 在线观看免费亚洲| 偷拍自拍另类欧美| 久久综合色婷婷| 成人av网站免费| 亚洲国产一区二区视频| 日韩一级片在线播放| 国产精品资源在线| 一区二区视频在线看| 91精品久久久久久蜜臀| 国产精品一区一区三区| 亚洲欧美中日韩| 欧美吻胸吃奶大尺度电影| 捆绑调教美女网站视频一区| 中文字幕在线观看一区二区| 91.com视频| 9l国产精品久久久久麻豆| 亚洲地区一二三色| 日本一区免费视频| 91精品国产综合久久香蕉麻豆| 国产精品一区二区黑丝| 依依成人综合视频| 久久久99免费| 欧美日韩aaa| 成人黄色片在线观看| 男人的天堂亚洲一区| 亚洲欧美欧美一区二区三区| 欧美一区二区三区四区五区 | 一区二区三区精密机械公司| 精品精品欲导航| 日本精品视频一区二区| 国产综合久久久久久久久久久久| 亚洲精选视频免费看| 久久久久久久精| 69堂精品视频| 99久久精品国产网站| 国产一区二区三区四区在线观看 | 国产精品福利在线播放| 日韩欧美的一区| 欧美日韩国产高清一区二区三区| jlzzjlzz亚洲女人18| 久久99精品国产麻豆婷婷洗澡| 亚洲成人高清在线| 亚洲欧美日韩在线不卡| 国产精品久久久久久久裸模| 日韩女优电影在线观看| 91麻豆精品国产| 欧美色综合网站| 欧美中文字幕一区二区三区亚洲| 成人午夜视频在线| 丁香另类激情小说| 国产成人日日夜夜| 高清在线观看日韩| 国产乱妇无码大片在线观看| 捆绑变态av一区二区三区| 日韩精品每日更新| 午夜精彩视频在线观看不卡| 一区二区三区在线影院| 亚洲一区二区三区自拍| 亚洲一区免费观看| 亚洲成人av免费| 亚洲国产精品久久一线不卡| 中文字幕日韩av资源站| 国产精品少妇自拍| 中文字幕日韩欧美一区二区三区| 国产精品久久久久久亚洲伦| 中文字幕人成不卡一区| 亚洲黄色av一区| 一级日本不卡的影视| 樱桃国产成人精品视频| 亚洲成人先锋电影| 免费视频最近日韩| 国产在线精品不卡| 成人18视频在线播放| 91色在线porny| 欧美日韩国产综合视频在线观看| 欧美群妇大交群中文字幕| 91精品国产欧美一区二区成人| 欧美一区二区三区四区久久| 欧美精品一区二区三区高清aⅴ | 欧美日韩国产另类一区| 欧美一卡二卡在线观看| 精品88久久久久88久久久| 欧美国产日韩在线观看| 亚洲男女一区二区三区| 亚洲二区在线观看| 国内精品伊人久久久久av一坑| 粉嫩绯色av一区二区在线观看 | 欧美成人艳星乳罩| 国产精品麻豆欧美日韩ww| 一区二区三区在线影院| 蜜臀av一区二区在线免费观看| 国产剧情一区在线| 91国偷自产一区二区开放时间| 欧美精品在线视频| 国产网站一区二区三区| 一区二区三区视频在线观看| 日本 国产 欧美色综合| 丁香一区二区三区| 欧美亚洲自拍偷拍| 久久久天堂av| 午夜影院久久久| 成人动漫一区二区三区| 欧美丰满嫩嫩电影| 最新成人av在线| 玖玖九九国产精品| 精品婷婷伊人一区三区三| 久久无码av三级| 午夜电影一区二区三区| 国产成人免费xxxxxxxx| 91精品欧美福利在线观看| 亚洲人成网站精品片在线观看| 麻豆高清免费国产一区| 在线视频一区二区三| 国产人妖乱国产精品人妖| 日韩精品一区第一页| 91丝袜美女网| 久久久久国产精品免费免费搜索| 肉肉av福利一精品导航| 97se亚洲国产综合自在线| 精品久久久久一区二区国产| 亚洲精品老司机| 99视频精品全部免费在线| 精品国产第一区二区三区观看体验| 亚洲黄网站在线观看| 成人福利视频网站| 久久一区二区视频| 奇米亚洲午夜久久精品| 色菇凉天天综合网| 国产精品国产三级国产三级人妇| 久久国产综合精品| 777午夜精品视频在线播放| 日韩一区在线播放| 成人黄色免费短视频| 国产视频在线观看一区二区三区| 日本sm残虐另类| 在线电影院国产精品| 亚洲综合成人在线视频| 在线看国产日韩| 亚洲欧美国产高清| 成人aa视频在线观看| 国产精品色哟哟| www.欧美日韩| 亚洲欧美一区二区在线观看| 99久久精品费精品国产一区二区| 日本一区二区三区四区在线视频| 国产成人一区二区精品非洲| 2023国产精品自拍| 国产高清在线精品| 中文字幕一区在线观看视频| 成人中文字幕电影|