AWT
Técnicas de Programación
Curso 2005/06
Santiago Pavón – UPM
V:060.423
Técnicas de Programación
¿Qué es java.awt?
Contiene clases para crear GUIs.
Historia
Los interfaces de usuario se crean empleando
clases que representan componentes:
botones, ventanas, etc.
Existen componentes de tipo contenedor.
Contienen a otros componentes
Usan gestores de geometría
Los componentes producen eventos
provocan la ejecución de ciertos métodos en las clases
escuchadores.
Técnicas de Programación
1
Pasos para crear un GUI
1. El área donde crearemos el UI será el proporcionado por
un contenedor, y que inicialmente será una ventana.
2. Definir el gestor de geometría que usaremos para el
contenedor. Decidirá como se visualizan los componentes
dentro del contenedor.
3. Crear los componentes que irán dentro del contenedor.
4. Añadir (visualizar) los componentes dentro del contenedor.
5. Enlazar con los escuchadores de eventos.
6. Si los componentes que creamos son contenedores se
repite el ciclo otra vez.
Derivar para cambiar comportamiento por defecto.
Técnicas de Programación
Métodos para repintar
Los componentes muestran un contenido gráfico
que es necesario repintar en determinadas
ocasiones.
paint(Graphics g)
Contiene el código para pintar.
update(Graphics g)
Borra el componente y lo repinta (llama a paint).
Puede redefinirse para invocar sólo a paint, sin borrar
previamente, evitando así parpadeos.
repaint()
Repintar el componente.
Es el método normal a invocar por los demás métodos
de la clase.
Llama a update.
Son métodos heredados de Component.
Técnicas de Programación
2
Repintado automático
La mayoría de los componentes se
repintan solos automáticamente.
Lo que no se repinte solo, lo debemos
repintar escribiendo el código necesario
dentro del método paint del
componente.
por ejemplo: decoración incluida por nosotros
Técnicas de Programación
Ejemplo creación GUI
Técnicas de Programación
3
Ejemplo creación GUI
public static void main(String[]a) {
Frame f = new Frame("Ejemplo");
Main p = new Main();
f.add(p);
f.pack();
f.setVisible(true);
}
Técnicas de Programación
Ejemplo creación GUI
public class Main extends Panel {
public Main() {
?????
}
/** Pinta el borde rojo. */
public void paint(Graphics g) {
??????
}
}
Técnicas de Programación
4
Ejemplo creación GUI
public Main() {
// Definir gestor de geometria.
setLayout(new BorderLayout(5,5));
Label l = new Label("Ejemplo"); // Crear etiqueta
Button b = new Button("Pulsame 2");// Crear boton
FotoSPane fp = new FotoSPane(); // Crear panel
// Visualizar componentes.
add("North",l);
add("South",b);
add("Center",fp);
// Registrar escuchador.
b.addActionListener(new Mensaje(fp,Color.yellow));
Técnicas de Programación
Ejemplo creación GUI
// Repetir el proceso para el contenedor fp.
Button b2 = new Button("pulsa");
fp.add(b2);
b2.addActionListener(new
Mensaje(fp,Color.red));
}
Técnicas de Programación
5
Ejemplo creación GUI
/** Pinta el borde rojo. */
public void paint(Graphics g) {
g.setColor(Color.red);
g.drawRect(5,5,290,290);
}
Técnicas de Programación
java.awt.Graphics
Técnicas de Programación
6
La clase java.awt.Graphics
Proporciona métodos para dibujar figuras,
fonts, imágenes, etc.
Representa el contexto gráfico de un
componente o imagen.
Técnicas de Programación
Ejemplo
Técnicas de Programación
7
Código del ejemplo
public void paint(Graphics g) {
g.setColor(Color.green);
g.drawLine(25,25,275,25);
g.setColor(Color.red);
g.drawRect(25,50,50,75);
g.fill3DRect(100,50,50,50,true);
g.drawOval(175,50,50,50);
Técnicas de Programación
Código del ejemplo
GraphicsEnvironment ge =
GraphicsEnvironment.
getLocalGraphicsEnvironment();
String[] fonts =
ge.getAvailableFontFamilyNames();
g.setFont(new Font(fonts[0],Font.PLAIN,12));
g.drawString("Ejemplo",100,125);
g.setFont(new Font(fonts[0],Font.BOLD,14));
g.drawString("Ejemplo",200,125);
Técnicas de Programación
8
Código del ejemplo
g.setColor(Color.blue);
int x[] = {250,275,300,325,350,375,400};
int y[] = { 75, 50, 75, 50, 75, 50, 75};
g.drawPolygon(x,y,6);
}
Técnicas de Programación
Métodos
Líneas:
void drawLine(int x1, int y1, int x2, int y2);
Rectángulos:
void drawRect(int x, int y, int width, int height);
void fillRect(int x, int y, int width, int height);
void clearRect(int x, int y, int width, int height);
void draw3dRect(int x, int y, int width, int height,
void drawRoundRect(int x, int y, int width, int height,
int arcWidth, int arcHeight);
void fillRoundRect(int x, int y, int width, int height,
int arcWidth, int arcHeight);
void fill3dRect(int x, int y, int width, int height,
boolean raised);
boolean raised);
Técnicas de Programación
9
Métodos (2)
Elipses:
void drawOval(int x, int y, int width, int height);
void fillOval(int x, int y, int width, int height);
Texto:
void drawString(String str, int x, int y);
void drawChars(char charArray[], int offset,
int numChars, int x, int y);
void drawBytes(byte byteArray[], int offset,
int numChars, int x, int y)
Polígonos:
void drawPolygon(int[] xPoints, int[] yPoints,
void drawPolygon(Polygon p);
int numPoints);
Técnicas de Programación
Métodos (3)
Imágenes:
boolean drawImage(Image img, int x, int y,
ImageObserver observer);
boolean drawImage(Image img, int x, int y, int width, int height,
boolean drawImage(Image img, int x, int y,
ImageObserver observer);
boolean drawImage(Image img, int x, int y, int width, int height,
Color bg, ImageObserver ob);
Color bg, ImageObserver ob);
boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2,
int sx1, int sy1, int sx2, int sy2, Color bg,
ImageObserver ob);
boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2,
int sx1, int sy1, int sx2, int sy2,
ImageObserver ob);
Técnicas de Programación
10
Métodos (4)
Color: setColor(Color c);
Modos de dibujar:
Modo Paint:setPaintMode();
Modo XOR: setXORMode(Color color);
Limitar zona de dibujo:
Reducir zona de pintado actual:
void clipRect(int x, int y, int width, int height);
Establecer zona de pintado:
void setClip(int x, int y, int width, int height);
Consultar zona actual:
Rectangle getClipBounds();
Técnicas de Programación
La clase Polygon
Constructores:
A partir de array de coordenadas:
Polygon(int[] xPoints, int[] yPoints, int numPoints);
Creando polígono vacio y añadiendo puntos:
Polygon();
void addPoint(int x, int y);
Métodos:
Rectángulo que lo abarca:
Rectangle getBounds();
Contiene un punto:
boolean contains(int x, int y);
Técnicas de Programación
11
La clase Font
Constructor: Font(String fontName, int style, int size);
Ejemplo:
Font f = new Font("TimesRoman",Font.BOLD,12);
Constantes de estilo:
Font.PLAIN Font.BOLD Font.ITALIC
Pueden sumarse estas constantes al construir el font.
Métodos:
String getFamily();
String getName();
int getSize();
int getStyle();
boolean isBold();
boolean isItalic();
boolean isPlain();
Técnicas de Programación
La clase Font (2)
Métodos para obtener fonts instalados en el sistema:
static Font getFont(String property);
static Font getFont(String property, Font defaultValue);
Formato de la propiedad: font-style-pointsize
Ejemplo: TimesRoman-bold-16
La clase GraphicsEnvironment mantiene información
sobre los fonts instalados.
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] fonts = ge.getAvailableFontFamilyNames();
Técnicas de Programación
12
La Clase FontMetrics
Métricas sobre fonts
Técnicas de Programación
La clase Point
Constructores:
Point();
Point(int x, int y);
Point(Point p);
Miembros:
int x;
int y;
Métodos:
void move(int newX, int newY);
void translate(int xChange, yChange);
Técnicas de Programación
13
La clase Dimension
Constructores:
Dimension();
Dimension(int width, int height);
Dimension(Dimension oldDimension);
Miembros:
int width;
int height;
Técnicas de Programación
La clase Rectangle
Constructores:
Rectangle(Point p, Dimension d);
Rectangle(int x, int y, int width, int height);
Rectangle(int width, int height);
Rectangle(Point p);
Rectangle(Dimension d);
Rectangle(Rectangle r);
Rectangle();
Miembros:
int x;
int y;
int width;
int height;
Técnicas de Programación
14
La clase Rectangle (2)
Métodos:
void move(int newX, int newY);
void translate(int xChange, yChange);
void setSize(int newWidth, int newHeight);
void grow(int widthChange, int heightChange);
void setBounds(int newX, int newY,
int newWidth, int newHeight);
boolean contains(int x, int y);
Rectangle intersection(Rectangle anotherRect);
boolean intersects(Rectangle anotherRect);
Rectangle union(Rectangle anotherRect);
void add(Point p);
void add(int x, int y);
void add(Rectangle anotherRect);
Técnicas de Programación
La clase Color
Constructores:
Color(int red, int green, int blue);
Color(int rgb);
Color(float red, float green, float blue);
Métodos:
int getRed();
int getGreen();
int getBlue();
Color darker();
Color brighter();
Técnicas de Programación
15
La clase Color (2)
Constantes:
Color.white
Color.lightGray
Color.gray
Color.darkGray
Color.black
Color.red
Color.pink
Color.orange
Color.yellow
Color.green
Color.magenta
Color.cyan
Color.blue
Técnicas de Programación
Doble Buffering
Técnicas de Programación
16
Doble Buffering
Objetivo: Evitar parpadeo en las animaciones.
El método update borra y repinta todo.
Si el tiempo en repintar es largo pueden notarse
parpadeos o ver como se construye la imagen.
Una solución:
No borrar todo antes de pintar, borrar y repintar sólo los
cambios.
Esto no siempre es aplicable, depende de lo que estemos
animando.
Doble Buffering:
La nueva imagen se construye en mem
Comentarios de: Introduccion a AWT (0)
No hay comentarios