📄 qcombobox.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 + -