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

📄 qcombobox.java

📁 j2me 高级UI
💻 JAVA
字号:
/**
 * 作者:cat 戚永城
 * 时间:2008-3-1
 * QQ:415898635
 * E-Mail:	415898635@qq.com
 * 			qyc_12345@163.com
 * 
 * */
package org.qui.conmponent;


import javax.microedition.lcdui.Graphics;
import org.qui.container.QSelector;
import org.qui.event.ItemEvent;
import org.qui.event.ItemStateListener;
import org.qui.image.JiugongDiv;
import org.qui.info.Attribute;
import org.qui.info.Key;
import org.qui.manager.QComboItem;
import org.qui.manager.UIManager;

public class QComboBox extends QComboItem {
	
	private int extraHeight = 40;

	private boolean listOpen = false;

	private int comboHeight = 0;// 关闭高度 与super.height相同

	private int maxOnshowItem = 5;

	public int startItem = 0;

	public QComboBox(){
		super();
	}
	
	public QComboBox(int x, int y, int width) {
		super(x, y, width, 18);
		comboHeight = super.height;
		br=Attribute.text_backR;
		bg=Attribute.text_backG;
		bb=Attribute.text_backB;
	}

	
	public void paint(Graphics g) {
		g.setColor(br,bg,bb);
		g.fillRect(x + ui.offx, y + ui.offy, width, comboHeight);
		g.setFont(font);
		if (listOpen) 
		{
			// paint comboBox
			g.drawImage(UIManager.combo_btn_up, x + ui.offx + width - comboHeight, y + ui.offy, Graphics.LEFT | Graphics.TOP);
			// paint extraHeight
			g.setColor(br,bg,bb);
			g.fillRect(x + ui.offx, y  + ui.offy + comboHeight, width, extraHeight);
			// paint selector
			JiugongDiv.drawJiuGong(g, UIManager.list_selector, x + ui.offx, y  + ui.offy+ comboHeight + onShowSelectedItemNum * itemHeight,width, itemHeight);
			// paint other items
			int clipx = g.getClipX();
			int clipy = g.getClipY();
			int clipwidth = g.getClipWidth();
			int clipheight = g.getClipHeight();
			g.setClip(x + ui.offx, y  + ui.offy + comboHeight, width , extraHeight);
			g.setColor(fr, fg, fb);
			int length = itemSum < maxOnshowItem ? itemSum : maxOnshowItem;
			for (int i = 0; i < length; i++) {
				g.drawString(items.elementAt(i + startItem).toString(), x + ui.offx, y + ui.offy + comboHeight + i * itemHeight, Graphics.LEFT| Graphics.TOP);
			}
			g.setClip(clipx, clipy, clipwidth, clipheight);
			//if focus
			if(focus){
				JiugongDiv.drawJiuGong(g, UIManager.light, x + ui.offx -8, y + ui.offy -8, width+17,height+17);
			}
		} 
		else
		{
			g.drawImage(UIManager.combo_btn_down, x + ui.offx + width - comboHeight, y + ui.offy, Graphics.LEFT | Graphics.TOP);
			if(focus)
			{
				JiugongDiv.drawJiuGong(g, UIManager.light, x + ui.offx -8, y + ui.offy -8, width+16,comboHeight+16);
			}
		}
		// last paint selected item
		if (items.size() != 0 && onShowSelectedItemNum >= 0) {
			int clipx = g.getClipX();
			int clipy = g.getClipY();
			int clipwidth = g.getClipWidth();
			int clipheight = g.getClipHeight();
			g.setClip(x + ui.offx, y + ui.offy, width - comboHeight, comboHeight);
			g.setColor(fr, fg, fb);
			if(listOpen){
				g.setColor(Attribute.selectR,Attribute.selectG,Attribute.selectB);
				g.fillRect(x + ui.offx, y + ui.offy, width-comboHeight, comboHeight);
			}else{
				g.drawString(items.elementAt(startItem + onShowSelectedItemNum).toString(),	x + ui.offx, y  + ui.offy + comboHeight / 2 - itemHeight / 2,Graphics.LEFT | Graphics.TOP);
			} 
			g.setClip(clipx, clipy, clipwidth, clipheight);
		}
	}

	public void setSelectedItem(int itemNum) {
		this.onShowSelectedItemNum = itemNum;
	}

	public void addItem(String item) {
		items.addElement(item);
		itemSum = items.size();
		setExtraHeight();
	}

	public boolean removeItem(int index) {
		try {
			items.removeElementAt(index);
			itemSum = items.size();
			setExtraHeight();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}

	}

	public void setExtraHeight() {
		if (itemSum <= maxOnshowItem) {
			extraHeight = itemSum * itemHeight;
		} else {
			extraHeight = maxOnshowItem * itemHeight;
		}
		// 每当Extraheight改变 height随之改变
		height = comboHeight + extraHeight;
	}

	// 按键按下的时候做selector响应
	public void keyPressed(int keyCode) {
		super.keyPressed(keyCode);
		if (!ui.selector.inComboItem) {
			ui.selector.inComboItem = true;
			listOpen = true;
		} else {
			if (keyCode == Key.LEFT || keyCode == Key.UP) {
				if (onShowSelectedItemNum > 0) {
					onShowSelectedItemNum--;
				} else if (startItem > 0) {
					startItem--;
				}
			} else if (keyCode == Key.RIGHT || keyCode == Key.DOWN) {
				if (onShowSelectedItemNum < maxOnshowItem - 1) {
					onShowSelectedItemNum++;
				} else if (startItem < itemSum - onShowSelectedItemNum - 1) {
					startItem++;
				}
			} else if (keyCode == Key.FIRE) {
				ui.selector.inComboItem = false;
				listOpen = false;
			}
		}
	}

	public void keyReleased(int keyCode) {
		super.keyReleased(keyCode);
		itemStateChanged(keyCode);
	}
	
	public String getSelectedItem() {
		return items.elementAt(startItem + onShowSelectedItemNum).toString();
	}
	public int getSelectedItemIndex() {
		return startItem + onShowSelectedItemNum;
	}
}

⌨️ 快捷键说明

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