MiniColorChooser.java
资源名称:J2ME&Game.rar [点击查看]
上传用户:gyyuli
上传日期:2013-07-09
资源大小:3050k
文件大小:4k
源码类别:
J2ME
开发平台:
Java
- package ColorDemo;
- import javax.microedition.lcdui.*;
- /**
- * A Color chooser. This screen can be used to display and
- * choose colors. The current color is always available
- * via the getColor methods. It can be set with setColor.
- */
- public class MiniColorChooser extends Canvas {
- /** current color */
- int rgbColor;
- /** current index */
- int ndx = 0;
- /**
- * Create a new MiniColorChooser for a single color.
- */
- public MiniColorChooser() {
- setColor(0xffff00);
- }
- /**
- * Sets the current color to the specified RGB values. All subsequent
- * rendering operations will use this specified color. The RGB value
- * passed in is interpreted with the least significant eight bits
- * giving the blue component, the next eight more significant bits
- * giving the green component, and the next eight more significant
- * bits giving the red component. That is to say, the color component
- * is specified like 0x00RRGGBB.
- * @param RGB The color being set.
- */
- public void setColor(int RGB) {
- rgbColor = RGB & 0x00ffffff;
- }
- /**
- * Gets the current color.
- * @return an integer in form 0x00RRGGBB
- * @see #setColor(int, int, int)
- */
- public int getColor() {
- return rgbColor;
- }
- /** Border width */
- static final int BORDER = 2;
- /** Color bar height */
- static final int BAR_H = 14;
- /**
- * Paint the canvas with the current color and controls to change it.
- * @param g the graphics context to draw to the screen.
- */
- protected void paint(Graphics g) {
- int w = getWidth();
- int h = getHeight();
- int sample_w = w - 1;
- int sample_h = h - (BAR_H + BORDER) * 3;
- int sample_y = BORDER;
- int b_y = sample_y + sample_h + BORDER*2;
- int g_y = b_y + BAR_H;
- int r_y = g_y + BAR_H;
- // Fill the background
- g.setColor(0x000000);
- g.fillRect(0, 0, w, h);
- // Fill in the color sample
- g.setColor(rgbColor);
- g.fillRect(BORDER, sample_y, sample_w, sample_h);
- // Draw the colorbars
- int blue = (rgbColor >> 0) & 0xff;
- g.setColor(0, 0, 255);
- g.fillRect(20, b_y, blue / 4, 10);
- int green = (rgbColor >> 8) & 0xff;
- g.setColor(0, 255, 0);
- g.fillRect(20, g_y, green / 4, 10);
- int red = (rgbColor >> 16) & 0xff;
- g.setColor(255, 0, 0);
- g.fillRect(20, r_y, red / 4, 10);
- g.setColor(255, 255, 255);
- g.drawString(Integer.toString(blue),
- 18, b_y-3, Graphics.RIGHT|Graphics.TOP);
- g.drawString(Integer.toString(green),
- 18, g_y-3, Graphics.RIGHT|Graphics.TOP);
- g.drawString(Integer.toString(red),
- 18, r_y-3, Graphics.RIGHT|Graphics.TOP);
- if (ndx >= 0) {
- int y = b_y + ndx * BAR_H;
- g.drawRect(20, y, 63, 10);
- }
- }
- /**
- * Handle repeat as in pressed.
- * @param key was pressed
- */
- public void keyRepeated(int key) {
- keyPressed(key);
- }
- /**
- * Left and Right are used to change which color bar to change
- * Up and Down are used to increase/decrease the value of that bar.
- * @param key was pressed
- */
- protected void keyPressed(int key) {
- int action = getGameAction(key);
- int dir = 0;
- switch (action) {
- case RIGHT: dir += 1; break;
- case LEFT: dir -= 1; break;
- case UP: ndx -= 1; break;
- case DOWN: ndx += 1; break;
- default:
- return; // nothing we recognize, exit
- }
- // Limit selection to r,g,b and palette
- if (ndx < 0)
- ndx = 0;
- if (ndx > 2)
- ndx = 2;
- if (ndx >= 0) {
- int v = (rgbColor >> (ndx*8)) & 0xff;
- v += dir * 0x20;
- if (v < 0)
- v = 0;
- if (v > 255)
- v = 255;
- int mask = 0xff << (ndx*8);
- rgbColor = (rgbColor & ~mask) | v << (ndx*8);
- }
- repaint();
- }
- }