MiniColorChooser.java
上传用户:gyyuli
上传日期:2013-07-09
资源大小:3050k
文件大小:4k
源码类别:

J2ME

开发平台:

Java

  1. package ColorDemo;
  2. import javax.microedition.lcdui.*;
  3. /**
  4.  * A Color chooser.  This screen can be used to display and
  5.  * choose colors.  The current color is always available
  6.  * via the getColor methods.  It can be  set with setColor.
  7.  */
  8. public class MiniColorChooser extends Canvas {
  9.     /** current color */
  10.     int rgbColor;
  11.     /** current index */
  12.     int ndx = 0;
  13.     
  14.     /**
  15.      * Create a new MiniColorChooser for a single color.
  16.      */
  17.     public MiniColorChooser() {
  18. setColor(0xffff00);
  19.     }
  20.     /**
  21.      * Sets the current color to the specified RGB values. All subsequent
  22.      * rendering operations will use this specified color. The RGB value
  23.      * passed in is interpreted with the least significant eight bits
  24.      * giving the blue component, the next eight more significant bits
  25.      * giving the green component, and the next eight more significant
  26.      * bits giving the red component. That is to say, the color component
  27.      * is specified like 0x00RRGGBB.
  28.      * @param RGB The color being set.
  29.      */
  30.     public void setColor(int RGB) {
  31. rgbColor = RGB & 0x00ffffff;
  32.     }
  33.     /**
  34.      * Gets the current color.
  35.      * @return an integer in form 0x00RRGGBB
  36.      * @see #setColor(int, int, int)
  37.      */
  38.     public int getColor() {
  39.         return rgbColor;
  40.     }
  41.     /** Border width */
  42.     static final int BORDER = 2;
  43.     /** Color bar height */
  44.     static final int BAR_H = 14;
  45.     /**
  46.      * Paint the canvas with the current color and controls to change it.
  47.      * @param g the graphics context to draw to the screen.
  48.      */
  49.     protected void paint(Graphics g) {
  50. int w = getWidth();
  51. int h = getHeight();
  52. int sample_w = w - 1;
  53. int sample_h = h - (BAR_H + BORDER) * 3;
  54. int sample_y = BORDER;
  55. int b_y = sample_y + sample_h + BORDER*2;
  56. int g_y = b_y + BAR_H;
  57. int r_y = g_y + BAR_H;
  58. // Fill the background
  59. g.setColor(0x000000);
  60. g.fillRect(0, 0, w, h);
  61. // Fill in the color sample
  62. g.setColor(rgbColor);
  63. g.fillRect(BORDER, sample_y, sample_w, sample_h);
  64. // Draw the colorbars
  65. int blue = (rgbColor >> 0) & 0xff;
  66. g.setColor(0, 0, 255);
  67. g.fillRect(20, b_y, blue / 4, 10);
  68. int green = (rgbColor >> 8) & 0xff;
  69. g.setColor(0, 255, 0);
  70. g.fillRect(20, g_y, green / 4, 10);
  71. int red = (rgbColor >> 16) & 0xff;
  72. g.setColor(255, 0, 0);
  73. g.fillRect(20, r_y, red / 4, 10);
  74. g.setColor(255, 255, 255);
  75. g.drawString(Integer.toString(blue), 
  76.      18, b_y-3,  Graphics.RIGHT|Graphics.TOP);
  77. g.drawString(Integer.toString(green), 
  78.      18, g_y-3,  Graphics.RIGHT|Graphics.TOP);
  79. g.drawString(Integer.toString(red), 
  80.      18, r_y-3,  Graphics.RIGHT|Graphics.TOP);
  81. if (ndx >= 0) {
  82.     int y = b_y + ndx * BAR_H;
  83.     g.drawRect(20, y, 63, 10);
  84. }
  85.     }
  86.     /**
  87.      * Handle repeat as in pressed.
  88.      * @param key was pressed
  89.      */
  90.     public void keyRepeated(int key) {
  91. keyPressed(key);
  92.     }
  93.     /**
  94.      * Left and Right are used to change which color bar to change
  95.      * Up and Down are used to increase/decrease the value of that bar.
  96.      * @param key was pressed
  97.      */
  98.     protected void keyPressed(int key) {
  99. int action = getGameAction(key);
  100. int dir = 0;
  101. switch (action) {
  102. case RIGHT: dir += 1; break;
  103. case LEFT: dir -= 1; break;
  104. case UP: ndx -= 1; break;
  105. case DOWN: ndx += 1; break;
  106. default:
  107.     return; // nothing we recognize, exit
  108. }
  109. // Limit selection to r,g,b and palette 
  110. if (ndx < 0)
  111.     ndx = 0;
  112. if (ndx > 2)
  113.     ndx = 2;
  114. if (ndx >= 0) {
  115.     int v = (rgbColor >> (ndx*8)) & 0xff;
  116.     v += dir * 0x20;
  117.     if (v < 0)
  118. v = 0;
  119.     if (v > 255)
  120. v = 255;
  121.     int mask = 0xff << (ndx*8);
  122.     rgbColor = (rgbColor & ~mask) | v << (ndx*8);
  123. }
  124. repaint();
  125.     }
  126. }