📄 calckeyboard.java
字号:
import javax.microedition.lcdui.*;
/**
* 该类描述了计算器键盘。提供了直观的图形用户界面,该类支持触摸屏功能。
*/
public class CalcKeyboard extends CustomItem {
public static final String BACKSPACE = "<-";
public static final String CE = "CE";
public static final String C = "C";
public static final String SYMBOL_MINUS = "+/-";
public static final String NUM_ZERO = "0";
public static final String NUM_ONE = "1";
public static final String NUM_TWO = "2";
public static final String NUM_THREE = "3";
public static final String NUM_FOUR = "4";
public static final String NUM_FIVE = "5";
public static final String NUM_SIX = "6";
public static final String NUM_SEVEN = "7";
public static final String NUM_EIGHT = "8";
public static final String NUM_NINE = "9";
public static final String SYMBOL_DOT = ".";
public static final String ADD = "+";
public static final String MINUS = "-";
public static final String MULT = "*";
public static final String DIVIDE = "/";
public static final String EQUALS = "=";
private static final int PRESSED = 0;
private static final int RELEASED = 1;
private CalcKeyboardListener ckListener; //指针动作监视器
private Font textFont;
private int col; //列
private int row; //行
private int btnWidth; //按键宽
private int btnHeight; //按键高
private int hSpace = 4; //按键水平间距
private int vSpace = 4; //按键垂直间距
private int keyState = RELEASED;
private String[] keyLabel = {
BACKSPACE, CE, C, SYMBOL_MINUS,
NUM_SEVEN, NUM_EIGHT, NUM_NINE, DIVIDE,
NUM_FOUR, NUM_FIVE, NUM_SIX, MULT,
NUM_ONE, NUM_TWO, NUM_THREE, MINUS,
NUM_ZERO, SYMBOL_DOT, EQUALS, ADD
};
public CalcKeyboard(int col, int row) {
super(null);
textFont = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE);
this.col = col;
this.row = row;
btnHeight = textFont.getHeight() + 4;
btnWidth = btnHeight + 10;
}
protected int getMinContentHeight() {
return row * (btnHeight + vSpace) - vSpace;
}
protected int getMinContentWidth() {
return col * (btnWidth + hSpace) - hSpace;
}
protected int getPrefContentHeight(int width) {
return getMinContentHeight();
}
protected int getPrefContentWidth(int height) {
return getMinContentWidth();
}
protected void paint(Graphics g, int w, int h) {
for(int i=0; i<keyLabel.length; i++) {
drawButton(g, keyLabel[i], i%col * (btnWidth+hSpace), i/col*(btnHeight+vSpace), btnWidth, btnHeight);
}
}
private void drawButton(Graphics g, String str, int x, int y, int w, int h) {
g.setColor(160, 160, 255);
g.drawRect(x, y, w-1, h-1);
if(keyState == RELEASED) {
g.setColor(240, 240, 255);
}
else if(keyState == PRESSED) {
g.setColor(210, 210, 255);
}
g.fillRect(x+2, y+2, w-4, h-4);
g.setColor(0, 0, 0);
g.setFont(textFont);
g.drawString(str, x+w/2, y+h, Graphics.BOTTOM|Graphics.HCENTER);
}
private int getIndex(int x, int y) {
int j = x / (btnWidth+hSpace);
int i = y / (btnHeight+vSpace);
return (col*i)+j;
}
//指针事件处理方法
//如果当前设备支持触摸屏功能,当用户使用笔在屏幕上按下时,
//系统将调用该方法。
protected void pointerPressed(int x, int y) {
keyState = PRESSED;
int ax = x - x % (btnWidth+hSpace);
int ay = y - y % (btnHeight+vSpace);
repaint(ax, ay, btnWidth, btnHeight);
}
//指针事件处理方法
//如果当前设备支持触摸屏功能,当用户使用笔在屏幕上按下,然后释放时,
//系统将调用该方法。
protected void pointerReleased(int x, int y) {
keyState = RELEASED;
int ax = x - x % (btnWidth+hSpace);
int ay = y - y % (btnHeight+vSpace);
repaint(ax, ay, btnWidth, btnHeight);
if(ckListener != null) {
int index = getIndex(x, y);
ckListener.actionPerformmed(this, keyLabel[index]);
}
}
//为当前计算器键盘设置监视器
public void setCalcKeyboardListener(CalcKeyboardListener ckListener) {
this.ckListener = ckListener;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -