📄 droppanel.java
字号:
package com.ismyway.fairyui;
import javax.microedition.lcdui.Graphics;
import com.ismyway.anyview.others.Settings;
import com.ismyway.util.Theme;
public class DropPanel extends Panel {
private DropList dl;
private int maxItems = 3;
private int topIndex = 0;
private int currentIndex = 0;
private int showItems = 3;
private int itemHeight = 10;
private int vert = 0;
public DropPanel(DropList dl, int vert) {
this.dl = dl;
this.vert = vert;
itemHeight = getFont().getHeight() + 2;
}
public void paint(Graphics g, int adjustx, int adjusty) {
g.setColor(0xFFFFFF);
g.fillRect(getLeft() - adjustx, getTop() - adjusty, getWidth(), getHeight());
g.setColor(0);
g.drawRect(getLeft() - adjustx, getTop() - adjusty, getWidth(), getHeight());
for (int i = 0; i < showItems; i++) {
paintItem(g, i + topIndex, adjustx, adjusty);
}
if (dl.getItems().size() > maxItems) {
int left = getLeft() - adjustx;
int top = getTop() - adjusty;
int tx, ty;
if (topIndex != 0) { //上箭头
tx = left + getWidth() - 3;
ty = top + 2;
if (currentIndex == topIndex) {
Theme.drawArrow(g, Theme.Arrow, tx - 7, ty, Theme.UP);
} else {
Theme.drawArrow(g, Theme.ArrowShade, tx - 7, ty, Theme.UP);
}
}
if (topIndex != dl.getItems().size() - maxItems) {
tx = left + getWidth() - 3;
ty = top + getHeight() - 3;
if (topIndex + maxItems == currentIndex + 1) {
Theme.drawArrow(g, Theme.Arrow, tx - 7, ty - 4, Theme.DOWN);
} else {
Theme.drawArrow(g, Theme.ArrowShade, tx - 7, ty - 4, Theme.DOWN);
}
}
}
}
private void paintItem(Graphics g, int itemindex, int adjustx, int adjusty) {
int left = getLeft() - adjustx;
int top = getTop() + itemHeight * (itemindex - topIndex) - adjusty;
String title = (String) dl.getItems().get(itemindex);
g.setFont(getFont());
if (itemindex == currentIndex) {
Theme.drawSelectedBackground(g, left + 1, top + 1, getWidth() - 1, itemHeight - 1);
g.setColor(Theme.TextShade);
g.drawString(title, left + 3, top + 1, ANCHOR);
g.setColor(Theme.TextLight);
g.drawString(title, left + 2, top, ANCHOR);
} else {
g.setColor(Theme.TextColor);
g.drawString(title, left + 2, top, ANCHOR);
}
}
public void show() {
//System.out.println(dl.getTop() + ", " + verticalOffset + ", " + dl.getHeight());
if (dl.getTop() - vert + dl.getHeight() > mainCanvas.getHeight() / 2) {
mainCanvas.showPopup(this, Settings.ANIMATE_UP);
} else {
mainCanvas.showPopup(this, Settings.ANIMATE_DOWN);
}
}
public void validate() {
if (dl.getTop() - vert + dl.getHeight() > mainCanvas.getHeight() / 2) { //向上弹出
maxItems = (dl.getTop() - vert) / itemHeight;
} else { //向下弹出
maxItems = (mainCanvas.getHeight() - dl.getTop() - dl.getHeight() + vert) / itemHeight;
}
//System.out.println(dl.getTop() + ", " + verticalOffset + ", " + dl.getHeight());
if (dl.getItems().size() < maxItems) {
setHeight(dl.getItems().size() * itemHeight);
showItems = dl.getItems().size();
} else {
setHeight(maxItems * itemHeight);
showItems = maxItems;
}
setWidth(dl.getWidth());
setLeft(dl.getLeft());
if (dl.getTop() - vert + dl.getHeight() > mainCanvas.getHeight() / 2) {
setTop(dl.getTop() - vert - getHeight() - 1);
//System.out.println("向上 = " + (dl.getTop() - vert - getHeight() - 1));
} else {
setTop(dl.getTop() + dl.getHeight() - vert);
//System.out.println("向下 = " + (dl.getTop() + dl.getHeight() - vert));
}
currentIndex = dl.getSelectedIndex();
topIndex = currentIndex;
if (topIndex + showItems > dl.getItems().size()) {
topIndex = dl.getItems().size() - showItems;
}
topIndex = topIndex < 0 ? 0 : topIndex;
}
public boolean keyReleased(int keyCode) {
keyCode = Settings.mapKey(keyCode);
if (keyCode == Settings.VKEY_UP || keyCode == Settings.VKEY_NUM2) { //上
currentIndex--;
if (currentIndex < 0) {
currentIndex = dl.getItems().size() - 1;
topIndex = dl.getItems().size() - showItems;
}
if (currentIndex < topIndex) {
topIndex = currentIndex;
}
return true;
} else if (keyCode == Settings.VKEY_DOWN || keyCode == Settings.VKEY_NUM8) { //下
currentIndex++;
if (currentIndex > dl.getItems().size() - 1) {
currentIndex = topIndex = 0;
}
if (currentIndex > topIndex + showItems - 1) {
topIndex = currentIndex - showItems + 1;
}
return true;
} else if (keyCode == Settings.VKEY_FIRE || keyCode == Settings.VKEY_NUM5) {
dl.setSelectedIndex(currentIndex);
mainCanvas.closePopup();
dl.itemStateChange();
} else if (keyCode == Settings.VKEY_LEFT || keyCode == Settings.VKEY_NUM4) {
mainCanvas.closePopup();
return true;
} else if (keyCode == Settings.VKEY_RIGHT || keyCode == Settings.VKEY_NUM6) {
} else if (keyCode == Settings.VKEY_LSOFT || keyCode == Settings.VKEY_STAR) {
dl.setSelectedIndex(currentIndex);
mainCanvas.closePopup();
dl.itemStateChange();
} else if (keyCode == Settings.VKEY_RSOFT || keyCode == Settings.VKEY_POUND) {
mainCanvas.closePopup();
return true;
}
return true;
}
public boolean pointerPressed(int x, int y) {
lastPointerX = x;
lastPointerY = y;
if (x > getLeft() && x < getLeft() + getWidth() && y > getTop() && y < getTop() + getHeight()) {
currentIndex = (y - getTop()) / getFont().getHeight() + topIndex;
return true;
}
return false;
}
public boolean pointerReleased(int x, int y) {
if (lastPointerX > getLeft() && lastPointerX < getLeft() + getWidth() && lastPointerY > getTop()
&& lastPointerY < getTop() + getHeight()) {
if (x > getLeft() && x < getLeft() + getWidth() && y > getTop() && y < getTop() + getHeight()) {
int index = (y - getTop()) / getFont().getHeight() + topIndex;
if (index == currentIndex) {
return keyReleased(Settings.VKEY_FIRE);
} else {
currentIndex = index;
return true;
}
}
return false;
} else {
if (x > getLeft() && x < getLeft() + getWidth() && y > getTop() && y < getTop() + getHeight()) {
currentIndex = (y - getTop()) / getFont().getHeight() + topIndex;
return true;
} else {
mainCanvas.closePopup();
return true;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -