J2ME
Clase
para representar objetos gráficos. Permite manejar eventos de bajo nivel y dibujar cualquier tipo de elemento grafico en pantalla. Capaz de mostrar información gráfica a nivel de pixel (de ahí se deriva el “bajo nivel”) Básicamente se pueden realizar 3 operaciones Dibujar primitivas gráficas.
Commands (Alto nivel)
Key Codes (Bajo nivel) 0-9, *, #. (gestión de pulsación) Tecla↔ Numero simbólico.
Métodos Abstractos(manejo de teclas)
Soporte
de dispositivo puntero:
boolean hasPointerEvents(): Posee? boolean hasPointerMotionEvents(): Detecta?
Si
posee detección de eventos (métodos abstractos):
Una
pantalla Canvas no posee la capacidad por sí misma de restaurar su estado en caso de interrumpirse la ejecución de la aplicación para, por ejemplo, avisar de una llamada entrante.
Respuesta: hideNotify(): antes de ocurrir el evento
(incluir código necesario para salvar la información actual)
Funciones
del API de bajo nivel:
Controlar los eventos de bajo nivel. Controlar qué aparece en pantalla.
Gestión Método
de dibujo en pantalla abstracto
paint()
de
la
clase
canvas. Para repintar, se llama al metodo repaint(). El MID no limpia la pantalla antes de llamar a paint(): Es acción del paint() pintar cada pixel.
Pasada
como parámetro de paint(Graphics g). Permite dibujar en una pantalla Canvas. Métodos de uso u obtención: Dentro del método paint() de la clase
Canvas. A partir de un objeto Image:
▪ Image img = Image.createImage(ancho, alto); ▪ Graphics g = img.getGraphics();
Canvas
posee dos métodos:
getWidth(): Obtiene ancho de la pantalla. getHeight(): Obtiene el alto de la pantalla.
Posicion
de puntos: (→,↓)
Esquina superior izquierda: (0,0) Esquina inferior derecha (getWidth()-1,
getHeight()-1)
Cambio
de origen:
Método translate(int x, int y) de la clase
Graphics.
Existen
dos métodos útiles:
boolean Display.isColor(): true=color,
false=gris. int Display.numColors(): Numero de colores o grises Modelo
de color de 24 bits en RGB (Graphics) Método setColor() ▪ int Graphics.setColor(int RGB) ▪ int Graphics.setColor(int rojo, int verde, int azul) ->Max 255 ▪ g.setColor(0,0,0); //Negro
Permite seleccionar tipo de letra en función de 3 atributos: aspecto, estilo y tamaño Fuentes disponibles
Atributos FACE_SYSTEM
Aspecto
FACE_MONOSPACE FACE_PROPORTIONAL STYLE_PLAIN
Estilo
STYLE_BOLD STYLE_ITALIC STYLE_UNDERLINED SIZE_SMALL
Tamaño
SIZE_MEDIUM SIZE_LARGE
Sintaxis:
Font.getFont(int aspecto, int estilo, int tamaño)
Graphics g; Font fuente=Font.getFont(FACE_SYSTEM, STYLE_PLAIN, SIZE_MEDIUM); g.setFont(fuente); g.drawString(“Hola mundo”, 23 , 45, BASELINE|HCENTER)
Líneas g.drawLine(x1,y1,x2,y2); //Línea de (x1,y1) a
(x2,y2)
Rectángulos Planos ▪ g.drawRect(x,y,ancho,alto); //sin relleno ▪ g.fillRect(x,y,ancho,alto); //con relleno Redondeados ▪ g.drawRoundRect(x,y,ancho,alto,arcoAncho,arcoAlto); ▪ g.fillRoundRect(x,y,ancho,alto,arcoAncho,arcoAlto);
Arcos Simple: g.drawArc(x1,y1,x2,y2,ѳ°1, ѳ°2 ); Relleno: g.fillArc(x1,y1,x2,y2,ѳ°1, ѳ°2 );
Inmutables Image img = createImage(“foto.png”); Se crean a partir de un mapa de bits. No se puede variar su aspecto.
Mutables Image img =
Image.createImage(75,25); Se trabaja sobre una matriz de puntos. Podemos crear, modificar, etc. La imagen deseada
Mostrar imagen Graphics.drawImage(imagen,x,y,punto
Double
buffering:
Elimina el parpadeo al actualizar la
pantalla. Clave: actualizar las gráficas en memoria principal y volcar a pantalla. boolean isDoubleBuffered() ▪ true: Dispositivo utiliza la técnica. ▪ false: Hay que implementar el double buffer.
1)
Crear una imagen mutable del tamaño de la pantalla Image pantalla2; if(!isBuffered()){ pantalla2=Image.createImage(getWidth(), getHeight()); …}
2)
Implementar paint(Graphics g) adecuadamente protected void paint(Graphics g){ Graphics pantalla1 = g; g= pantalla.getGraphics(); //actualizar elementos gráficos sobre g … //volcar a la pantalla para visualizar …
Clipping Clave: Actualizar solo la parte que se haya
modificado. Se puede definir una región que limíte qué parte de la pantalla se pintará al llamar a paint() ▪ void setClip(int x, int y, int ancho, int alto)
Solo puede existir una zona de clipping por
cada objeto Graphics. Otros métodos: