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

📄 calckeyboard.java

📁 J2ME程序设计实例教程的源码
💻 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 + -