SlideShare una empresa de Scribd logo
1 de 60
Descargar para leer sin conexión
1
Técnicas de Programación
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.
2
Técnicas de Programación
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.
3
Técnicas de Programación
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
4
Técnicas de Programación
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) {
??????
}
}
5
Técnicas de Programación
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));
}
6
Técnicas de Programación
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
7
Técnicas de Programación
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
8
Técnicas de Programación
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);
9
Técnicas de Programación
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,
boolean raised);
void fill3dRect(int x, int y, int width, int height,
boolean raised);
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);
10
Técnicas de Programación
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,
int numPoints);
void drawPolygon(Polygon p);
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,
ImageObserver observer);
boolean drawImage(Image img, int x, int y,
Color bg, ImageObserver ob);
boolean drawImage(Image img, int x, int y, int width, int height,
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);
11
Técnicas de Programación
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);
12
Técnicas de Programación
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();
13
Técnicas de Programación
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);
14
Técnicas de Programación
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;
15
Técnicas de Programación
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();
16
Técnicas de Programación
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
17
Técnicas de Programación
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 memoria y se pinta de
golpe cuando está lista, sin borrar nada previamente.
Técnicas de Programación
Codificación doble buffering
Image buffer = createImage(800,600);
public void update(Graphics g) {
// Contexto grafico del buffer
Graphics bg = buffer.getGraphics();
// Borrar el buffer.
bg.setColor(getBackground());
bg.fillRect(0,0,800,600);
paint(bg); // Pintar en el buffer.
g.drawImage(buffer,0,0,this); // Copiar el buffer.
}
public void paint(Graphics g) {
// sentencias de pintar.
}
18
Técnicas de Programación
Componentes
Técnicas de Programación
java.awt.Component
Proporciona componentes de alto nivel para
construir los interfaces de usuario.
Clases:
Button Label Checkbox
Choice List TextField
TextArea Scrollbar Canvas
Menu MenuBar PopupMenu
Contenedores:
Panel
Frame
Dialog
ScrollPane
19
Técnicas de Programación
Ejemplo: componentes
Técnicas de Programación
Ejemplo
Label label = new Label("Muestrario");
Button button = new Button("Pulsame");
add(label);
add(button);
20
Técnicas de Programación
Ejemplo
Checkbox cb1 = new Checkbox("Rojo");
Checkbox cb2 = new Checkbox("Azul");
Checkbox cb3 = new Checkbox("Verde");
add(cb1);
add(cb2);
add(cb3);
Técnicas de Programación
Ejemplo
CheckboxGroup cbg = new CheckboxGroup();
Checkbox r1 = new Checkbox("Alto", cbg,true);
Checkbox r2 = new Checkbox("Medio",cbg,false);
Checkbox r3 = new Checkbox("Bajo", cbg,false);
add(r1);
add(r2);
add(r3);
21
Técnicas de Programación
Ejemplo
Choice ch = new Choice();
ch.addItem("Pedro");
ch.addItem("Luis");
ch.addItem("Juan");
ch.addItem("Mario");
add(ch);
Técnicas de Programación
Ejemplo
List list = new List(3,false);
list.add("Pedro");
list.add("Luis");
list.add("Juan");
list.add("Mario");
add(list);
22
Técnicas de Programación
Ejemplo
TextField tf = new TextField(10);
add(tf);
TextArea ta = new TextArea(10,10);
add(ta);
Técnicas de Programación
Ejemplo
Scrollbar sb = new Scrollbar();
Canvas canvas = new Canvas();
canvas.setBackground(Color.white);
canvas.setSize(50,50);
add(sb);
add(canvas);
23
Técnicas de Programación
Componentes: métodos comunes
Pintado
void setForeground(Color c);
void setBackground(Color c);
Color getForeground();
Color getBackground();
void setFont(Font f);
Font getFont();
FontMetrics getFontMetrics(Font font);
void setVisible(boolean b);
boolean isVisible();
Técnicas de Programación
Componentes: métodos comunes
Pintado
void repaint();
void update(Graphics g);
void paint(Graphics g);
El repintado no tiene porque ser inmediato. tm solicita el
repintado antes de tm milisegundos.
void repaint(long tm);
Puede solicitarse el repintado de una zona.
void repaint(int x, int y, int width, int height);
void repaint(long tm, int x, int y,int width,int height);
24
Técnicas de Programación
Componentes: métodos comunes
Posicionamiento y Tamaño:
Dimension getSize(); void setSize(….);
void setLocation(Point p); Point getLocation();
void setBounds(Rectangle r); Rect.. getBounds();
Component getComponentAt(Point p);
Indicar tamaño mínimo, máximo y preferido:
Dimension getMinimumSize();
Dimension getMaximumSize();
Dimension getPreferredSize();
el gestor de geometría es el que decide.
No hay métodos set: redefinir estos
métodos en clases derivadas.
Técnicas de Programación
Componentes: métodos comunes
Gestión de eventos:
La recepción de eventos puede habilitarse,
deshabilitarse o consultarse:
void setEnabled(boolean b);
boolean isEnabled();
25
Técnicas de Programación
Componentes: métodos comunes
Componentes pueden estar en dos estados según
estén actualizados por el gestor de geometría o no:
valid
invalid
Pasan al estado invalid si se cambia su tamaño o
posición.
Para cambiar el estado:
void invalidate();
void validate();
validate() invoca doLayout(), que no hace nada,
excepto en los contenedores, que recalcula los
hijos.
void doLayout();
Técnicas de Programación
Componentes: métodos comunes
Referencia al padre:
Container getParent();
26
Técnicas de Programación
Contenedores
Técnicas de Programación
Descripción
Necesarios para organizar los componentes en
grupos.
Todo componente debe incluirse dentro de un
contenedor.
Los contenedores también son componentes.
Tipos:
Panel: simplemente un marco.
Frame: una ventana independiente.
Dialog: ventana emergente para diálogos.
ScrollPane: panel con barras de scroll.
27
Técnicas de Programación
Contenedores: métodos comunes
Añadir un componente al contenedor:
Component add(Component comp);
Component add(Component comp, int pos);
Component add(String name, Component comp);
Eliminar componentes:
void remove(Component comp);
void removeAll();
Consultar:
Component getComponent(int n)
throws ArrayIndexOutOfBoundsException;
Component[] getComponents();
int countComponents();
Técnicas de Programación
Contenedor: Panel
Es un marco sin nada especial.
Constructor:
Panel();
28
Técnicas de Programación
Contenedor: Frame
Constructores:
Frame();
Frame(String frameTitle);
Métodos:
void dispose();
void setTitle(String newTitle);
String getTitle();
void setCursor(int cursorType);
int getCursorType();
void setResizable(boolean allowResizing);
boolean isResizable();
void setIconImage(Image image);
Image getIconImage();
Técnicas de Programación
Frame
Tipos de cursores disponibles:
Frame.DEFAULT_CURSOR
Frame.CROSSHAIR_CURSOR
Frame.TEXT_CURSOR
Frame.WAIT_CURSOR
Frame.HAND_CURSOR
Frame.MOVE_CURSOR
Frame.N_RESIZE_CURSOR
Frame.NE_RESIZE_CURSOR
Frame.E_RESIZE_CURSOR
Frame.SE_RESIZE_CURSOR
Frame.S_RESIZE_CURSOR
Frame.SW_RESIZE_CURSOR
Frame.W_RESIZE_CURSOR
Frame.NW_RESIZE_CURSOR
29
Técnicas de Programación
Uso de Menús en los Frames
Los frames pueden tener barra de menús.
Constructor: crear una barra de menús:
MenuBar();
Añadir una barra de menús a un frame:
void setMenuBar(MenuBar mb);
Técnicas de Programación
Menú
Constructor:
Menu();
Menu(String menuLabel);
Menu(String menuLabel,boolean allowTearoff);
Añadir un menu a una barra de menús:
Menu add(Menu m);
30
Técnicas de Programación
Ejemplo
Frame myFrame = new Frame();
// Crear barra de menús
MenuBar myMenuBar = new MenuBar();
// Añadir la barra de menús al frame
myFrame.setMenuBar(myMenuBar);
// Crear menú
Menu fileMenu = new Menu("File");
// Añadir menú a barra de menús
myMenuBar.add(fileMenu);
Técnicas de Programación
Menú
Las entradas del menú se pueden añadir
directamente, o creando un MenuItem:
fileMenu.add("Open");
MenuItem saveMenuItem = new MenuItem("Save");
fileMenu.add(saveMenuItem);
Las entradas del menú pueden habilitarse
o deshabilitarse:
saveMenuItem.setEnabled(false);
Para añadir un separador al menú usar:
void addSeparator();
31
Técnicas de Programación
Menú
Creando un submenú:
Menu printSubmenu = new Menu("Print");
fileMenu.add(printSubmenu);
printSubmenu.add("Print Preview");
printSubmenu.add("Print Document");
Los menús pueden contener entradas de tipo
Checkbox:
CheckboxMenuItem(String itemLabel);
boolean getState();
void setState(boolean newState);
Técnicas de Programación
Menú
La colocación de los menús en la barra es
de izquierda a derecha.
Puede crearse un único menú en el lado
derecho (normalmente de ayuda) con:
void setHelpMenu(Menu helpMenu);
32
Técnicas de Programación
Ejemplo
Técnicas de Programación
Ejemplo: el menú Archivos
Menu ma = new Menu("Archivos");
ma.add("Abrir");
MenuItem save = new MenuItem("Salvar");
ma.add(save);
save.setEnabled(false);
ma.addSeparator();
Menu sm = new Menu("Submenu");
ma.add(sm);
sm.add("opcion 1");
sm.add("opcion 2");
33
Técnicas de Programación
Ejemplo: Los menús Edición y Ayuda
// Menu Edicion
Menu me = new Menu("Edicion");
CheckboxMenuItem cmi =
new CheckboxMenuItem("mayus");
me.add(cmi);
// Menu Ayuda
Menu help = new Menu("Ayuda");
help.add("ayuda");
Técnicas de Programación
Ejemplo: ventana y barra de menús
// una ventana nueva
Frame f = new Frame();
// Barra de menus de la ventana
MenuBar mb = new MenuBar();
f.setMenuBar(mb);
// añadir menu de archivos, edicion y ayuda
mb.add(ma);
mb.add(me);
mb.setHelpMenu(help);
34
Técnicas de Programación
Popup menus
Pueden asociarse menús popup con los
componentes.
Constructores:
PopupMenu();
PopupMenu(String title);
Se añaden elementos al menú popup
igual que en un menú normal.
El menú se añade a un componente
usando el método add del componente.
Técnicas de Programación
Ejemplo: Popup menús
PopupMenu pm = new PopupMenu("Ejemplo");
pm.add("uno");
pm.add("dos");
Canvas c = new Canvas();
c. add(pm);
35
Técnicas de Programación
Ejemplo: Popup menús (con)
// Activación de popup:
c.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
pm.show(e.getComponent(),
e.getX(),
e.getY());
}
}
});
Técnicas de Programación
Contenerdor: Dialog
Son ventanas independientes con más
limitaciones que un frame.
Se crean SIEMPRE asociadas a un frame
o a otro dialogo.
Dos tipos:
Modales: Bloquean el frame asociado
mientras el dialogo es visible.
No modales: no lo bloquean.
36
Técnicas de Programación
Dialog
Contructores:
Dialog(Frame parentFrame, boolean isModal);
Dialog(Frame parentFrame, String title,
boolean isModal);
Métodos:
void setResizable(boolean allowResizing);
boolean isResizable();
void setTitle(String newTitle);
String getTitle();
boolean isModal()
Técnicas de Programación
Contenedor: ScrollPane
Es un Panel con barras de desplazamiento.
Constructores:
ScrollPane();
ScrollPane(int scrollbarOption);
Valores válidos para el parámetro scrollbarOption:
ScrollPane.SCROLLBARS_ALWAYS
ScrollPane.SCROLLBARS_NEVER
ScrollPane.SCROLLBARS_AS_NEEDED // valor por defecto
37
Técnicas de Programación
ScrollPane
Métodos:
void setScrollPosition(Point point);
void setScrollPosition(int x, int y);
Dimension getViewport(); //zona visible
Obtener referencias a las barras de
desplazamiento:
Adjustable getHAdjustable();
Adjustable getVAdjustable();
Técnicas de Programación
Gestores de Geometría
38
Técnicas de Programación
¿Qué son?
Colocar componentes dentro de los contenedores.
Estrategia de colocación basada en definir
posiciones relativas para los componentes, no
absolutas.
Independiente de las dimensiones de la pantalla.
Tipos:
FlowLayout GridLayout GridBagLayout
BorderLayout CardLayout null
Se instalan en el contenedor con:
void setLayout(LayoutManager mgr);
Técnicas de Programación
Gestor: FlowLayout
Coloca los componentes de izquierda a derecha,
línea a línea.
Constructores:
FlowLayout();
FlowLayout(int alignment);
FlowLayout(int alignment, int hgap, int vgap);
Valores válidos para el alineamiento:
FlowLayout.LEFT
FlowLayout.RIGHT
FlowLayout.CENTER
39
Técnicas de Programación
FlowLayout
Ejemplo:
Técnicas de Programación
FlowLayout
Ejemplo:
FlowLayout layout = new FlowLayout();
setLayout(layout);
add(new Button("hola"));
add(new Button("adios"));
add(new Button("Etiqueta mas larga"));
add(new Button("1"));
add(new Button("2"));
add(new Button("3"));
40
Técnicas de Programación
Gestor: GridLayout
Crea una parrilla de celdas iguales que se
rellena de izquierda a derecha, línea a línea.
La parrilla la crea con el número de
columnas o filas que se le indique.
El gestor calcula el otro parámetro.
El parámetro libre debe ponerse a cero.
Constructores:
GridLayout(int rows,int cols);
GridLayout(int rows,int cols,int hgap,int vgap);
Técnicas de Programación
GridLayout
Ejemplo:
41
Técnicas de Programación
GridLayout
Ejemplo:
GridLayout layout = new GridLayout(2,0);
setLayout(layout);
add(new Button("hola"));
add(new Button("adios"));
add(new Button("Etiqueta mas larga"));
add(new Button("1"));
add(new Button("2"));
add(new Button("3"));
Técnicas de Programación
Gestor: BorderLayout
Coloca los componentes en los cuatro
puntos cardinales, o en el centro.
La zona centro se expande siempre para
ocupar el mayor área posible.
Las demás zonas intentan ocupar el menor
área posible.
42
Técnicas de Programación
BorderLayout
Constructores:
BorderLayout();
BorderLayout(int hgap, int vgap);
Métodos:
El método add tiene un parámetro adicional para indicar
el punto cardinal.
Component add(String pos, Component comp);
Component add(Component comp, int index);
Constantes:
“North” BorderLayout.NORTH
“South” BorderLayout.SOUTH
“East” BorderLayout.EAST
“West” BorderLayout.WEST
“Center” BorderLayout.CENTER
Técnicas de Programación
BorderLayout
Ejemplo:
43
Técnicas de Programación
BorderLayout
Ejemplo:
BorderLayout layout = new BorderLayout();
setLayout(layout);
add(new Button("norte"),BorderLayout.NORTH);
add(new Button("este"),BorderLayout.EAST);
add(new Button("el lado oeste"),BorderLayout.WEST);
add(new Button("sur"),BorderLayout.SOUTH);
add(new Button("centro"),BorderLayout.CENTER);
Técnicas de Programación
Gestor: GridBagLayout
Crea una parrilla de celdas de igual tamaño.
Un componente puede ocupar varias celdas.
Constructor:
GridBagLayout();
Hay que dar al gestor de geometría las
restricciones para colocar cada componente:
Los conjuntos de restricciones son objetos de tipo:
GridBagConstraints
Para poner establecer las restricciones:
setConstraints(Component comp,
GridBagConstraints gbc);
44
Técnicas de Programación
La clase GridBagConstraints
gridx, gridy:
Posición en la parrilla donde colocar el componente.
Valor por defecto es GridBagConstraints.RELATIVE, que
indica "a continuación de la última posición".
gridwidth, gridheight:
Número de celdas a ocupar por el componente.
Constantes:
GridBagConstraints.REMAINDER: ocupar hasta el final.
GridBagConstraints.RELATIVE: ocupar hasta el último colocado
Técnicas de Programación
GridBagConstraints
fill:
Como rellenar el espacio si la celda es mayor que el
componente.
Valores posibles:
GridBagConstraints.NONE
GridBagConstraints.HORIZONTAL
GridBagConstraints.VERTICAL
GridBagConstraints.BOTH
ipadx, ipady:
Pixels a añadir al componente para hacerlo mayor.
insets:
Instancia de la clase Insets.
Indica espacio a dejar alrededor del componente.
45
Técnicas de Programación
GridBagConstraints
anchor:
Donde anclar el componente dentro de la celda.
Si la celda es mayor que el componente.
Valores posibles:
GridbagConstraints.CENTER (valor por defecto)
GridbagConstraints.NORTH
GridBagConstraints.NORTHEAST
GridBagConstraints.EAST
GridBagConstraints.SOUTHEAST
GridBagConstraints.SOUTH
GridBagConstraints.SOUTHWEST
GridBagConstraints.WEST
GridBagConstraints.NORTHWEST
weightx, weighty:
Indica un tamaño relativo de los componentes.
Técnicas de Programación
GridBagConstraints
Ejemplo:
46
Técnicas de Programación
Ejemplo: GridBagConstraints
Ejemplo:
GridBagLayout layout = new GridBagLayout();
setLayout(layout);
GridBagConstraints c = new GridBagConstraints();
Button b1 = new Button("uno");
Button b2 = new Button("dos");
Button b3 = new Button("tres");
Button b4 = new Button("cuatro");
Técnicas de Programación
Ejemplo: GridBagConstraints
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
c.fill = GridBagConstraints.BOTH;
layout.setConstraints(b1,c);
add(b1);
47
Técnicas de Programación
Ejemplo: GridBagConstraints
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
layout.setConstraints(b2,c);
add(b2);
Técnicas de Programación
Ejemplo: GridBagConstraints
c.gridx = 0;
c.gridy = 2;
// el valor de c.gridwidth era 1
c.fill = GridBagConstraints.BOTH;
layout.setConstraints(b3,c);
add(b3);
48
Técnicas de Programación
Ejemplo: GridBagConstraints
c.gridx = 1;
c.gridy = 1;
// el valor de c.gridwidth era 1
c.gridheight = 2;
c.fill = GridBagConstraints.BOTH;
layout.setConstraints(b4,c);
add(b4);
Técnicas de Programación
Gestor: CardLayout
Apila los componentes, siendo visible sólo
uno de ellos.
Suelen apilarse varios Panel, cada uno con su
propio gestor de geometría.
Constructores:
CardLayout();
CardLayout(int hgap, int vgap);
En el método add se asigna una etiqueta al
componente gestionado.
Component add(String label, Component c);
49
Técnicas de Programación
CardLayout
Puede seleccionarse el componente a
visualizar con:
void show(Container c, String name);
void first(Container c);
void last(Container c);
void next(Container c);
void previous(Container c);
Técnicas de Programación
CardLayout
Ejemplo:
50
Técnicas de Programación
Ejemplo: CardLayout
final CardLayout layout = new CardLayout();
setLayout(layout);
Button b1 = new Button("Boton en la primera hoja");
Button b2 = new Button("La otra hoja");
add("uno",b1);
add("dos",b2);
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent ev) {
layout.next(this);
}
};
b1.addActionListener(this);
b2.addActionListener(this);
Técnicas de Programación
Sin gestor de geometría
Para no tener gestor de geometría puede
usarse el valor null.
setLayout(null);
Colocar manualmente los componentes en la
posición y del tamaño que se desee:
setLocation
setSize
setBounds
51
Técnicas de Programación
La clase Insets
Define un área de separación entre el borde de un
contenedor y sus componentes.
Constructor:
Insets(int top, int left, int bottom, int right);
Los contenedores implementan el método:
Insets getInsets()
Redefinirlo si deseamos cambiar la separación.
public Insets getInsets() {
return new Insets(20, 20, 20, 20);
}
Técnicas de Programación
Eventos
52
Técnicas de Programación
Eventos
Los eventos representan la actividad entre
el sistema, los programas y los usuarios.
Se definen varios tipos de eventos.
Técnicas de Programación
Funcionamiento
Normalmente:
componentes generan eventos en respuesta a las
acciones de los usuarios.
objetos del usuario escuchan y atienden los eventos
generados.
Cuando se produce un evento:
El generador invoca un método en todos los objetos
escuchadores registrados.
El método que se invoca depende del tipo de evento.
Estos métodos se definen en varias interfaces
llamadas escuchadoras.
Las clases escuchadoras implementan interfaces
escuchadoras.
53
Técnicas de Programación
Funcionamiento
Los objetos escuchadores deben registrarse
en los generadores.
addXXX y removeXXX
XXX es el nombre de la interfaz escuchadora
Ejemplo:
boton.addActionListener(obj_escuchador);
boton.removeActionListener(obj_escuchador);
Técnicas de Programación
Tipos de eventos
Etc…
ComponentListenerDialog, FrameComponentEvent
WindowListenerDialog, FrameWindowEvent
AdjustmentListenerScrollbarAdjustmentEvent
MouseMotionListenerCanvas, Dialog, Frame, Panel, WindowMouseMotionEvent
MouseListenerCanvas, Dialog, Frame, Panel, WindowMouseEvent
KeyListenerComponentKeyEvent
FocusListenerComponentFocusEvent
ItemListenerCheckbox, CheckboxMenuItem, Choice, ListItemEvent
ActionListenerButton, List, MenuItem, TextFieldActionEvent
EscuchadorComponenteEvento
54
Técnicas de Programación
Clases Adaptadoras
Existen clases adaptadoras cuyo objetivo es
evitar que las clases escuchadoras tengan que
implementar todo el interfaz escuchador.
Las clases adaptadoras implementan los métodos
de las interfaces escuchadoras con un cuerpo
vacío.
Así, las clases escuchadoras sólo tienen que extender a
los adaptadores y redefinir únicamente el cuerpo de
los métodos que necesitan.
Técnicas de Programación
Métodos
mouseClicked(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mousePressed(MouseEvent)
mouseReleased(MouseEvent)
MouseListener
MouseAdapter
keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)
KeyListener
KeyAdapter
focusGained(FocusEvent)
focusLost(FocusEvent)
FocusListener
FocusAdapter
componentHidden(componentEvent)
componentShown(componentEvent)
componentMoved(componentEvent)
componentResized(componentEvent)
ComponentListener
ComponentAdapter
adjustmentValueChanged(AdjustmentEvent)AdjustmentListener
actionPerformed(ActionEvent)ActionListener
MétodosInterfaz
55
Técnicas de Programación
Métodos
textValueChanged(TextEvent)TextListener
itemStateChanged(itemEvent)ItemListener
windowOpened(WindowEvent)
windowClosing(WindowEvent)
windowClosed(WindowEvent)
windowActivated(WindowEvent)
windowDeactivated(WindowEvent)
windowIconified(WindowEvent)
windowDeiconified(WindowEvent)
WindowListener
WindowAdapter
mouseDragged(MouseEvent)
mouseMoved(MouseEvent)
MouseMotionListener
MouseMotionAdapter
MétodosInterfaz
Técnicas de Programación
Eventos de Acción
Clase de evento: ActionEvent.
Debe implementarse el interfaz ActionListener.
Tiene un único método:
void actionPerformed(ActionEvent event);
Método de ActionEvent:
String getActionCommand();
devuelve la etiqueta del generador
Método de EventObject:
Object getSource();
Devuelve objeto donde se genero el evento.
56
Técnicas de Programación
Eventos de Teclado
Clase de evento: KeyEvent.
Debe implementarse el interfaz KeyListener.
void keyTyped(KeyEvent event);
void keyPressed(KeyEvent event);
void keyReleased(KeyEvent event);
Métodos de KeyEvent:
// devuelve el codigo de la tecla.
int getKeyCode()
// devuelve el caracter de la tecla.
// solo para teclas normales.
char getKeyChar()
// indica si es tecla de accion:
// F1..F12, home, flechas, etc.
boolean isActionKey();
La clase InputEvent define el manejo de los modificadores.
Técnicas de Programación
Códigos de Teclas
KeyEvent.F1
. . .
KeyEvent.F12
KeyEvent.LEFT
KeyEvent.RIGHT
KeyEvent.UP
KeyEvent.DOWN
KeyEvent.END
KeyEvent.HOME
KeyEvent.PGDN
KeyEvent.PGUP
KeyEvent.PRINT_SCREEN
KeyEvent.SCROLL_LOCK
KeyEvent.CAPS_LOCK
KeyEvent.NUM_LOCK
KeyEvent.PAUSE
KeyEvent.INSERT
KeyEvent.DELETE
KeyEvent.ENTER
KeyEvent.TAB
KeyEvent.BACK_SPACE
KeyEvent.ESCAPE
57
Técnicas de Programación
Eventos de Ratón
Clase de evento: MouseEvent.
Existen dos interfaces escuchadores de eventos de ratón:
MouseListener: todo menos movimiento.
void mousePressed(MouseEvent event);
void mouseReleased(MouseEvent event);
void mouseClicked(MouseEvent event);
void mouseEntered(MouseEvent event);
void mouseExited(MouseEvent event);
MouseMotionListener: eventos de movimiento.
void mouseMoved(MouseEvent event);
void mouseDragged(MouseEvent event);
Métodos de MouseEvent:
int getClickCount();
Point getPoint();
int getX();
int getY();
La clase InputEvent define el manejo de los modificadores.
Técnicas de Programación
La clase InputEvent
KeyEvent y MouseEvent derivan de InputEvent.
Define el manejo de los modificadores de teclas y de
ratón.
teclas de control, mayúsculas, alternativa, meta y los
botones del ratón.
Métodos de InputEvent:
int getModifiers() // mapa de bits
boolean isShiftDown()
boolean isControlDown()
boolean isMetaDown()
long getWhen()
58
Técnicas de Programación
Eventos de Ratón
Ejemplo:
Técnicas de Programación
Eventos de Ratón
Ejemplo:
f.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent ev) {
getGraphics().drawString("hi",
ev.getX(),
ev.getY());
}
});
59
Técnicas de Programación
Manejo Mapa de bits
Códigos:
InputEvent.ALT_MASK
InputEvent.CTRL_MASK
InputEvent.META_MASK
InputEvent.SHIFT_MASK
InputEvent.BUTTON1_MASK
InputEvent.BUTTON2_MASK
InputEvent.BUTTON3_MASK
Ejemplo:
InputEvent e;
if ((e.getModifiers() & InputEvent.ALT_MASK)!= 0) {
// la tecla ALT estaba pulsada.
}
Técnicas de Programación
Los eventos ItemEvent
Clase de evento: ItemEvent
Debe implementarse el interfaz ItemListener.
Tiene un único método:
void itemStateChanged(ItemEvent event)
Métodos de la clase ItemEvent:
// Checkbox, CheckboxMenuItem y Choice:
// objeto donde ocurrio el evento
ItemSelectable getItemSelectable()
// List: indice elemento seleccionado o deseleccionado.
// Checkbox, CheckboxMenuItem y Choice: etiqueta elemento.
Object getItem()
// Checkbox, CheckboxMenuItem y Choice: estado
// Estados validos: ItemEvent.SELECTED,
// ItemEvent.DESELECTED
int getStateChange()
60
Técnicas de Programación
Los eventos AdjustmentEvent
Clase de evento: AdjustmentEvent.
Implementar interfaz AdjustmentListener.
Tiene un único método:
void adjustmentValueChanged(AdjustmentEvent e)
Métodos de la clase AdjustmentEvent:
int getAdjustmentType()
// Devuelve:AdjustmentEvent.UNIT_INCREMENT
// AdjustmentEvent.UNIT_DECREMENT
// AdjustmentEvent.BLOCK_INCREMENT
// AdjustmentEvent.BLOCK_DECREMENT
// AdjustmentEvent.Track

Más contenido relacionado

La actualidad más candente

Creación interactiva web: Processing
Creación interactiva web: ProcessingCreación interactiva web: Processing
Creación interactiva web: ProcessingMiguel Gea
 
Pintando gráficas con Python
Pintando gráficas con PythonPintando gráficas con Python
Pintando gráficas con PythonManuel Martín
 
Taller processing arduino
Taller processing arduinoTaller processing arduino
Taller processing arduinojesusresta
 
Correccion De La Evaluacion Periodica Del Segundo Periodo
Correccion De La Evaluacion Periodica Del Segundo Periodo Correccion De La Evaluacion Periodica Del Segundo Periodo
Correccion De La Evaluacion Periodica Del Segundo Periodo jcardenasperdomo
 
Planificacion pis ms project1d
Planificacion pis ms project1dPlanificacion pis ms project1d
Planificacion pis ms project1dHector Molina
 
Casos practicos
Casos practicosCasos practicos
Casos practicosamcas
 
Prueba de Evaluación del Curso:"Delineante de Construcción".
Prueba de Evaluación del Curso:"Delineante de Construcción".Prueba de Evaluación del Curso:"Delineante de Construcción".
Prueba de Evaluación del Curso:"Delineante de Construcción".Docencia_Formación_Emprego
 
Taller de Ecuaciones de Primer Grado con Geogebra
Taller de Ecuaciones de Primer Grado con GeogebraTaller de Ecuaciones de Primer Grado con Geogebra
Taller de Ecuaciones de Primer Grado con GeogebraLupita Rodriguez
 
Análisis de funciones con Geogebra
Análisis de funciones con GeogebraAnálisis de funciones con Geogebra
Análisis de funciones con GeogebraMatemática UESFmocc
 

La actualidad más candente (18)

Creación interactiva web: Processing
Creación interactiva web: ProcessingCreación interactiva web: Processing
Creación interactiva web: Processing
 
Graficas matlab
Graficas matlabGraficas matlab
Graficas matlab
 
Pintando gráficas con Python
Pintando gráficas con PythonPintando gráficas con Python
Pintando gráficas con Python
 
Introducción a Processing
Introducción a ProcessingIntroducción a Processing
Introducción a Processing
 
Taller processing arduino
Taller processing arduinoTaller processing arduino
Taller processing arduino
 
Correccion De La Evaluacion Periodica Del Segundo Periodo
Correccion De La Evaluacion Periodica Del Segundo Periodo Correccion De La Evaluacion Periodica Del Segundo Periodo
Correccion De La Evaluacion Periodica Del Segundo Periodo
 
Balas
BalasBalas
Balas
 
Software De Matematicas
Software De MatematicasSoftware De Matematicas
Software De Matematicas
 
Planificacion pis ms project1d
Planificacion pis ms project1dPlanificacion pis ms project1d
Planificacion pis ms project1d
 
Casos practicos
Casos practicosCasos practicos
Casos practicos
 
Lienzo.java
Lienzo.javaLienzo.java
Lienzo.java
 
Graficando funciones cuadraticas en geogebra
Graficando funciones cuadraticas en geogebraGraficando funciones cuadraticas en geogebra
Graficando funciones cuadraticas en geogebra
 
Manual winplot
Manual winplotManual winplot
Manual winplot
 
Epu
EpuEpu
Epu
 
Prueba de Evaluación del Curso:"Delineante de Construcción".
Prueba de Evaluación del Curso:"Delineante de Construcción".Prueba de Evaluación del Curso:"Delineante de Construcción".
Prueba de Evaluación del Curso:"Delineante de Construcción".
 
Winplot
WinplotWinplot
Winplot
 
Taller de Ecuaciones de Primer Grado con Geogebra
Taller de Ecuaciones de Primer Grado con GeogebraTaller de Ecuaciones de Primer Grado con Geogebra
Taller de Ecuaciones de Primer Grado con Geogebra
 
Análisis de funciones con Geogebra
Análisis de funciones con GeogebraAnálisis de funciones con Geogebra
Análisis de funciones con Geogebra
 

Similar a Introduccion a awt (20)

Gu is awt_swing
Gu is awt_swingGu is awt_swing
Gu is awt_swing
 
widgets.pdf
widgets.pdfwidgets.pdf
widgets.pdf
 
Swing 121012064634-phpapp01
Swing 121012064634-phpapp01Swing 121012064634-phpapp01
Swing 121012064634-phpapp01
 
Programa voz
Programa vozPrograma voz
Programa voz
 
Temaswing
TemaswingTemaswing
Temaswing
 
Swing intefaz grafica de usuario
Swing intefaz grafica de usuarioSwing intefaz grafica de usuario
Swing intefaz grafica de usuario
 
Revista digital
Revista digitalRevista digital
Revista digital
 
Prac3
Prac3Prac3
Prac3
 
Practica 3
Practica 3Practica 3
Practica 3
 
JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)
 
Vbr Awt 01
Vbr Awt 01Vbr Awt 01
Vbr Awt 01
 
UNIDAD I.pptx
UNIDAD I.pptxUNIDAD I.pptx
UNIDAD I.pptx
 
Presentació1 (1).ppt interfaces graficas
Presentació1 (1).ppt interfaces graficasPresentació1 (1).ppt interfaces graficas
Presentació1 (1).ppt interfaces graficas
 
Diseno
DisenoDiseno
Diseno
 
Taller PyGTK
Taller PyGTKTaller PyGTK
Taller PyGTK
 
Matlab
MatlabMatlab
Matlab
 
ventanas swing en java
ventanas swing en javaventanas swing en java
ventanas swing en java
 
Swing
SwingSwing
Swing
 
Swing
SwingSwing
Swing
 
Swing
SwingSwing
Swing
 

Más de Ricardo Garcia

Registro plataforma chamilo
Registro plataforma chamiloRegistro plataforma chamilo
Registro plataforma chamiloRicardo Garcia
 
Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01Ricardo Garcia
 
Javaswing 1de4-151119150600-lva1-app6892
Javaswing 1de4-151119150600-lva1-app6892Javaswing 1de4-151119150600-lva1-app6892
Javaswing 1de4-151119150600-lva1-app6892Ricardo Garcia
 
Java 120706083911-phpapp01
Java 120706083911-phpapp01Java 120706083911-phpapp01
Java 120706083911-phpapp01Ricardo Garcia
 
Java awt tutorial javatpoint
Java awt tutorial   javatpointJava awt tutorial   javatpoint
Java awt tutorial javatpointRicardo Garcia
 
Introduccion orientaciona objetos
Introduccion orientaciona objetosIntroduccion orientaciona objetos
Introduccion orientaciona objetosRicardo Garcia
 
Guis en java-1pp_2011_
Guis en java-1pp_2011_Guis en java-1pp_2011_
Guis en java-1pp_2011_Ricardo Garcia
 
Fundamentos programacion poo
Fundamentos programacion pooFundamentos programacion poo
Fundamentos programacion pooRicardo Garcia
 
Diagrama de clases y diagrama de objetos
Diagrama de clases y diagrama de objetosDiagrama de clases y diagrama de objetos
Diagrama de clases y diagrama de objetosRicardo Garcia
 

Más de Ricardo Garcia (17)

Sobrecarga de datos
Sobrecarga de datosSobrecarga de datos
Sobrecarga de datos
 
Slides p3 2
Slides p3 2Slides p3 2
Slides p3 2
 
Registro plataforma chamilo
Registro plataforma chamiloRegistro plataforma chamilo
Registro plataforma chamilo
 
Otro poo
Otro pooOtro poo
Otro poo
 
Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01
 
Metodos en java
Metodos en javaMetodos en java
Metodos en java
 
Metodologia
MetodologiaMetodologia
Metodologia
 
La clase string
La clase stringLa clase string
La clase string
 
Javaswing 1de4-151119150600-lva1-app6892
Javaswing 1de4-151119150600-lva1-app6892Javaswing 1de4-151119150600-lva1-app6892
Javaswing 1de4-151119150600-lva1-app6892
 
Java 120706083911-phpapp01
Java 120706083911-phpapp01Java 120706083911-phpapp01
Java 120706083911-phpapp01
 
Java awt tutorial javatpoint
Java awt tutorial   javatpointJava awt tutorial   javatpoint
Java awt tutorial javatpoint
 
Introduccion orientaciona objetos
Introduccion orientaciona objetosIntroduccion orientaciona objetos
Introduccion orientaciona objetos
 
Guis en java-1pp_2011_
Guis en java-1pp_2011_Guis en java-1pp_2011_
Guis en java-1pp_2011_
 
Fundamentos programacion poo
Fundamentos programacion pooFundamentos programacion poo
Fundamentos programacion poo
 
Diagrama de clases y diagrama de objetos
Diagrama de clases y diagrama de objetosDiagrama de clases y diagrama de objetos
Diagrama de clases y diagrama de objetos
 
08. java con my sql
08. java con my sql08. java con my sql
08. java con my sql
 
07. arreglos
07. arreglos07. arreglos
07. arreglos
 

Último

Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 

Último (7)

Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 

Introduccion a awt

  • 1. 1 Técnicas de Programación 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.
  • 2. 2 Técnicas de Programación 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.
  • 3. 3 Técnicas de Programación 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
  • 4. 4 Técnicas de Programación 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) { ?????? } }
  • 5. 5 Técnicas de Programación 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)); }
  • 6. 6 Técnicas de Programación 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
  • 7. 7 Técnicas de Programación 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
  • 8. 8 Técnicas de Programación 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);
  • 9. 9 Técnicas de Programación 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, boolean raised); void fill3dRect(int x, int y, int width, int height, boolean raised); 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);
  • 10. 10 Técnicas de Programación 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, int numPoints); void drawPolygon(Polygon p); 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, ImageObserver observer); boolean drawImage(Image img, int x, int y, Color bg, ImageObserver ob); boolean drawImage(Image img, int x, int y, int width, int height, 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);
  • 11. 11 Técnicas de Programación 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);
  • 12. 12 Técnicas de Programación 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();
  • 13. 13 Técnicas de Programación 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);
  • 14. 14 Técnicas de Programación 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;
  • 15. 15 Técnicas de Programación 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();
  • 16. 16 Técnicas de Programación 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
  • 17. 17 Técnicas de Programación 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 memoria y se pinta de golpe cuando está lista, sin borrar nada previamente. Técnicas de Programación Codificación doble buffering Image buffer = createImage(800,600); public void update(Graphics g) { // Contexto grafico del buffer Graphics bg = buffer.getGraphics(); // Borrar el buffer. bg.setColor(getBackground()); bg.fillRect(0,0,800,600); paint(bg); // Pintar en el buffer. g.drawImage(buffer,0,0,this); // Copiar el buffer. } public void paint(Graphics g) { // sentencias de pintar. }
  • 18. 18 Técnicas de Programación Componentes Técnicas de Programación java.awt.Component Proporciona componentes de alto nivel para construir los interfaces de usuario. Clases: Button Label Checkbox Choice List TextField TextArea Scrollbar Canvas Menu MenuBar PopupMenu Contenedores: Panel Frame Dialog ScrollPane
  • 19. 19 Técnicas de Programación Ejemplo: componentes Técnicas de Programación Ejemplo Label label = new Label("Muestrario"); Button button = new Button("Pulsame"); add(label); add(button);
  • 20. 20 Técnicas de Programación Ejemplo Checkbox cb1 = new Checkbox("Rojo"); Checkbox cb2 = new Checkbox("Azul"); Checkbox cb3 = new Checkbox("Verde"); add(cb1); add(cb2); add(cb3); Técnicas de Programación Ejemplo CheckboxGroup cbg = new CheckboxGroup(); Checkbox r1 = new Checkbox("Alto", cbg,true); Checkbox r2 = new Checkbox("Medio",cbg,false); Checkbox r3 = new Checkbox("Bajo", cbg,false); add(r1); add(r2); add(r3);
  • 21. 21 Técnicas de Programación Ejemplo Choice ch = new Choice(); ch.addItem("Pedro"); ch.addItem("Luis"); ch.addItem("Juan"); ch.addItem("Mario"); add(ch); Técnicas de Programación Ejemplo List list = new List(3,false); list.add("Pedro"); list.add("Luis"); list.add("Juan"); list.add("Mario"); add(list);
  • 22. 22 Técnicas de Programación Ejemplo TextField tf = new TextField(10); add(tf); TextArea ta = new TextArea(10,10); add(ta); Técnicas de Programación Ejemplo Scrollbar sb = new Scrollbar(); Canvas canvas = new Canvas(); canvas.setBackground(Color.white); canvas.setSize(50,50); add(sb); add(canvas);
  • 23. 23 Técnicas de Programación Componentes: métodos comunes Pintado void setForeground(Color c); void setBackground(Color c); Color getForeground(); Color getBackground(); void setFont(Font f); Font getFont(); FontMetrics getFontMetrics(Font font); void setVisible(boolean b); boolean isVisible(); Técnicas de Programación Componentes: métodos comunes Pintado void repaint(); void update(Graphics g); void paint(Graphics g); El repintado no tiene porque ser inmediato. tm solicita el repintado antes de tm milisegundos. void repaint(long tm); Puede solicitarse el repintado de una zona. void repaint(int x, int y, int width, int height); void repaint(long tm, int x, int y,int width,int height);
  • 24. 24 Técnicas de Programación Componentes: métodos comunes Posicionamiento y Tamaño: Dimension getSize(); void setSize(….); void setLocation(Point p); Point getLocation(); void setBounds(Rectangle r); Rect.. getBounds(); Component getComponentAt(Point p); Indicar tamaño mínimo, máximo y preferido: Dimension getMinimumSize(); Dimension getMaximumSize(); Dimension getPreferredSize(); el gestor de geometría es el que decide. No hay métodos set: redefinir estos métodos en clases derivadas. Técnicas de Programación Componentes: métodos comunes Gestión de eventos: La recepción de eventos puede habilitarse, deshabilitarse o consultarse: void setEnabled(boolean b); boolean isEnabled();
  • 25. 25 Técnicas de Programación Componentes: métodos comunes Componentes pueden estar en dos estados según estén actualizados por el gestor de geometría o no: valid invalid Pasan al estado invalid si se cambia su tamaño o posición. Para cambiar el estado: void invalidate(); void validate(); validate() invoca doLayout(), que no hace nada, excepto en los contenedores, que recalcula los hijos. void doLayout(); Técnicas de Programación Componentes: métodos comunes Referencia al padre: Container getParent();
  • 26. 26 Técnicas de Programación Contenedores Técnicas de Programación Descripción Necesarios para organizar los componentes en grupos. Todo componente debe incluirse dentro de un contenedor. Los contenedores también son componentes. Tipos: Panel: simplemente un marco. Frame: una ventana independiente. Dialog: ventana emergente para diálogos. ScrollPane: panel con barras de scroll.
  • 27. 27 Técnicas de Programación Contenedores: métodos comunes Añadir un componente al contenedor: Component add(Component comp); Component add(Component comp, int pos); Component add(String name, Component comp); Eliminar componentes: void remove(Component comp); void removeAll(); Consultar: Component getComponent(int n) throws ArrayIndexOutOfBoundsException; Component[] getComponents(); int countComponents(); Técnicas de Programación Contenedor: Panel Es un marco sin nada especial. Constructor: Panel();
  • 28. 28 Técnicas de Programación Contenedor: Frame Constructores: Frame(); Frame(String frameTitle); Métodos: void dispose(); void setTitle(String newTitle); String getTitle(); void setCursor(int cursorType); int getCursorType(); void setResizable(boolean allowResizing); boolean isResizable(); void setIconImage(Image image); Image getIconImage(); Técnicas de Programación Frame Tipos de cursores disponibles: Frame.DEFAULT_CURSOR Frame.CROSSHAIR_CURSOR Frame.TEXT_CURSOR Frame.WAIT_CURSOR Frame.HAND_CURSOR Frame.MOVE_CURSOR Frame.N_RESIZE_CURSOR Frame.NE_RESIZE_CURSOR Frame.E_RESIZE_CURSOR Frame.SE_RESIZE_CURSOR Frame.S_RESIZE_CURSOR Frame.SW_RESIZE_CURSOR Frame.W_RESIZE_CURSOR Frame.NW_RESIZE_CURSOR
  • 29. 29 Técnicas de Programación Uso de Menús en los Frames Los frames pueden tener barra de menús. Constructor: crear una barra de menús: MenuBar(); Añadir una barra de menús a un frame: void setMenuBar(MenuBar mb); Técnicas de Programación Menú Constructor: Menu(); Menu(String menuLabel); Menu(String menuLabel,boolean allowTearoff); Añadir un menu a una barra de menús: Menu add(Menu m);
  • 30. 30 Técnicas de Programación Ejemplo Frame myFrame = new Frame(); // Crear barra de menús MenuBar myMenuBar = new MenuBar(); // Añadir la barra de menús al frame myFrame.setMenuBar(myMenuBar); // Crear menú Menu fileMenu = new Menu("File"); // Añadir menú a barra de menús myMenuBar.add(fileMenu); Técnicas de Programación Menú Las entradas del menú se pueden añadir directamente, o creando un MenuItem: fileMenu.add("Open"); MenuItem saveMenuItem = new MenuItem("Save"); fileMenu.add(saveMenuItem); Las entradas del menú pueden habilitarse o deshabilitarse: saveMenuItem.setEnabled(false); Para añadir un separador al menú usar: void addSeparator();
  • 31. 31 Técnicas de Programación Menú Creando un submenú: Menu printSubmenu = new Menu("Print"); fileMenu.add(printSubmenu); printSubmenu.add("Print Preview"); printSubmenu.add("Print Document"); Los menús pueden contener entradas de tipo Checkbox: CheckboxMenuItem(String itemLabel); boolean getState(); void setState(boolean newState); Técnicas de Programación Menú La colocación de los menús en la barra es de izquierda a derecha. Puede crearse un único menú en el lado derecho (normalmente de ayuda) con: void setHelpMenu(Menu helpMenu);
  • 32. 32 Técnicas de Programación Ejemplo Técnicas de Programación Ejemplo: el menú Archivos Menu ma = new Menu("Archivos"); ma.add("Abrir"); MenuItem save = new MenuItem("Salvar"); ma.add(save); save.setEnabled(false); ma.addSeparator(); Menu sm = new Menu("Submenu"); ma.add(sm); sm.add("opcion 1"); sm.add("opcion 2");
  • 33. 33 Técnicas de Programación Ejemplo: Los menús Edición y Ayuda // Menu Edicion Menu me = new Menu("Edicion"); CheckboxMenuItem cmi = new CheckboxMenuItem("mayus"); me.add(cmi); // Menu Ayuda Menu help = new Menu("Ayuda"); help.add("ayuda"); Técnicas de Programación Ejemplo: ventana y barra de menús // una ventana nueva Frame f = new Frame(); // Barra de menus de la ventana MenuBar mb = new MenuBar(); f.setMenuBar(mb); // añadir menu de archivos, edicion y ayuda mb.add(ma); mb.add(me); mb.setHelpMenu(help);
  • 34. 34 Técnicas de Programación Popup menus Pueden asociarse menús popup con los componentes. Constructores: PopupMenu(); PopupMenu(String title); Se añaden elementos al menú popup igual que en un menú normal. El menú se añade a un componente usando el método add del componente. Técnicas de Programación Ejemplo: Popup menús PopupMenu pm = new PopupMenu("Ejemplo"); pm.add("uno"); pm.add("dos"); Canvas c = new Canvas(); c. add(pm);
  • 35. 35 Técnicas de Programación Ejemplo: Popup menús (con) // Activación de popup: c.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { if (e.isPopupTrigger()) { pm.show(e.getComponent(), e.getX(), e.getY()); } } }); Técnicas de Programación Contenerdor: Dialog Son ventanas independientes con más limitaciones que un frame. Se crean SIEMPRE asociadas a un frame o a otro dialogo. Dos tipos: Modales: Bloquean el frame asociado mientras el dialogo es visible. No modales: no lo bloquean.
  • 36. 36 Técnicas de Programación Dialog Contructores: Dialog(Frame parentFrame, boolean isModal); Dialog(Frame parentFrame, String title, boolean isModal); Métodos: void setResizable(boolean allowResizing); boolean isResizable(); void setTitle(String newTitle); String getTitle(); boolean isModal() Técnicas de Programación Contenedor: ScrollPane Es un Panel con barras de desplazamiento. Constructores: ScrollPane(); ScrollPane(int scrollbarOption); Valores válidos para el parámetro scrollbarOption: ScrollPane.SCROLLBARS_ALWAYS ScrollPane.SCROLLBARS_NEVER ScrollPane.SCROLLBARS_AS_NEEDED // valor por defecto
  • 37. 37 Técnicas de Programación ScrollPane Métodos: void setScrollPosition(Point point); void setScrollPosition(int x, int y); Dimension getViewport(); //zona visible Obtener referencias a las barras de desplazamiento: Adjustable getHAdjustable(); Adjustable getVAdjustable(); Técnicas de Programación Gestores de Geometría
  • 38. 38 Técnicas de Programación ¿Qué son? Colocar componentes dentro de los contenedores. Estrategia de colocación basada en definir posiciones relativas para los componentes, no absolutas. Independiente de las dimensiones de la pantalla. Tipos: FlowLayout GridLayout GridBagLayout BorderLayout CardLayout null Se instalan en el contenedor con: void setLayout(LayoutManager mgr); Técnicas de Programación Gestor: FlowLayout Coloca los componentes de izquierda a derecha, línea a línea. Constructores: FlowLayout(); FlowLayout(int alignment); FlowLayout(int alignment, int hgap, int vgap); Valores válidos para el alineamiento: FlowLayout.LEFT FlowLayout.RIGHT FlowLayout.CENTER
  • 39. 39 Técnicas de Programación FlowLayout Ejemplo: Técnicas de Programación FlowLayout Ejemplo: FlowLayout layout = new FlowLayout(); setLayout(layout); add(new Button("hola")); add(new Button("adios")); add(new Button("Etiqueta mas larga")); add(new Button("1")); add(new Button("2")); add(new Button("3"));
  • 40. 40 Técnicas de Programación Gestor: GridLayout Crea una parrilla de celdas iguales que se rellena de izquierda a derecha, línea a línea. La parrilla la crea con el número de columnas o filas que se le indique. El gestor calcula el otro parámetro. El parámetro libre debe ponerse a cero. Constructores: GridLayout(int rows,int cols); GridLayout(int rows,int cols,int hgap,int vgap); Técnicas de Programación GridLayout Ejemplo:
  • 41. 41 Técnicas de Programación GridLayout Ejemplo: GridLayout layout = new GridLayout(2,0); setLayout(layout); add(new Button("hola")); add(new Button("adios")); add(new Button("Etiqueta mas larga")); add(new Button("1")); add(new Button("2")); add(new Button("3")); Técnicas de Programación Gestor: BorderLayout Coloca los componentes en los cuatro puntos cardinales, o en el centro. La zona centro se expande siempre para ocupar el mayor área posible. Las demás zonas intentan ocupar el menor área posible.
  • 42. 42 Técnicas de Programación BorderLayout Constructores: BorderLayout(); BorderLayout(int hgap, int vgap); Métodos: El método add tiene un parámetro adicional para indicar el punto cardinal. Component add(String pos, Component comp); Component add(Component comp, int index); Constantes: “North” BorderLayout.NORTH “South” BorderLayout.SOUTH “East” BorderLayout.EAST “West” BorderLayout.WEST “Center” BorderLayout.CENTER Técnicas de Programación BorderLayout Ejemplo:
  • 43. 43 Técnicas de Programación BorderLayout Ejemplo: BorderLayout layout = new BorderLayout(); setLayout(layout); add(new Button("norte"),BorderLayout.NORTH); add(new Button("este"),BorderLayout.EAST); add(new Button("el lado oeste"),BorderLayout.WEST); add(new Button("sur"),BorderLayout.SOUTH); add(new Button("centro"),BorderLayout.CENTER); Técnicas de Programación Gestor: GridBagLayout Crea una parrilla de celdas de igual tamaño. Un componente puede ocupar varias celdas. Constructor: GridBagLayout(); Hay que dar al gestor de geometría las restricciones para colocar cada componente: Los conjuntos de restricciones son objetos de tipo: GridBagConstraints Para poner establecer las restricciones: setConstraints(Component comp, GridBagConstraints gbc);
  • 44. 44 Técnicas de Programación La clase GridBagConstraints gridx, gridy: Posición en la parrilla donde colocar el componente. Valor por defecto es GridBagConstraints.RELATIVE, que indica "a continuación de la última posición". gridwidth, gridheight: Número de celdas a ocupar por el componente. Constantes: GridBagConstraints.REMAINDER: ocupar hasta el final. GridBagConstraints.RELATIVE: ocupar hasta el último colocado Técnicas de Programación GridBagConstraints fill: Como rellenar el espacio si la celda es mayor que el componente. Valores posibles: GridBagConstraints.NONE GridBagConstraints.HORIZONTAL GridBagConstraints.VERTICAL GridBagConstraints.BOTH ipadx, ipady: Pixels a añadir al componente para hacerlo mayor. insets: Instancia de la clase Insets. Indica espacio a dejar alrededor del componente.
  • 45. 45 Técnicas de Programación GridBagConstraints anchor: Donde anclar el componente dentro de la celda. Si la celda es mayor que el componente. Valores posibles: GridbagConstraints.CENTER (valor por defecto) GridbagConstraints.NORTH GridBagConstraints.NORTHEAST GridBagConstraints.EAST GridBagConstraints.SOUTHEAST GridBagConstraints.SOUTH GridBagConstraints.SOUTHWEST GridBagConstraints.WEST GridBagConstraints.NORTHWEST weightx, weighty: Indica un tamaño relativo de los componentes. Técnicas de Programación GridBagConstraints Ejemplo:
  • 46. 46 Técnicas de Programación Ejemplo: GridBagConstraints Ejemplo: GridBagLayout layout = new GridBagLayout(); setLayout(layout); GridBagConstraints c = new GridBagConstraints(); Button b1 = new Button("uno"); Button b2 = new Button("dos"); Button b3 = new Button("tres"); Button b4 = new Button("cuatro"); Técnicas de Programación Ejemplo: GridBagConstraints c.gridx = 0; c.gridy = 0; c.gridwidth = 2; c.fill = GridBagConstraints.BOTH; layout.setConstraints(b1,c); add(b1);
  • 47. 47 Técnicas de Programación Ejemplo: GridBagConstraints c.gridx = 0; c.gridy = 1; c.gridwidth = 1; c.fill = GridBagConstraints.BOTH; layout.setConstraints(b2,c); add(b2); Técnicas de Programación Ejemplo: GridBagConstraints c.gridx = 0; c.gridy = 2; // el valor de c.gridwidth era 1 c.fill = GridBagConstraints.BOTH; layout.setConstraints(b3,c); add(b3);
  • 48. 48 Técnicas de Programación Ejemplo: GridBagConstraints c.gridx = 1; c.gridy = 1; // el valor de c.gridwidth era 1 c.gridheight = 2; c.fill = GridBagConstraints.BOTH; layout.setConstraints(b4,c); add(b4); Técnicas de Programación Gestor: CardLayout Apila los componentes, siendo visible sólo uno de ellos. Suelen apilarse varios Panel, cada uno con su propio gestor de geometría. Constructores: CardLayout(); CardLayout(int hgap, int vgap); En el método add se asigna una etiqueta al componente gestionado. Component add(String label, Component c);
  • 49. 49 Técnicas de Programación CardLayout Puede seleccionarse el componente a visualizar con: void show(Container c, String name); void first(Container c); void last(Container c); void next(Container c); void previous(Container c); Técnicas de Programación CardLayout Ejemplo:
  • 50. 50 Técnicas de Programación Ejemplo: CardLayout final CardLayout layout = new CardLayout(); setLayout(layout); Button b1 = new Button("Boton en la primera hoja"); Button b2 = new Button("La otra hoja"); add("uno",b1); add("dos",b2); ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent ev) { layout.next(this); } }; b1.addActionListener(this); b2.addActionListener(this); Técnicas de Programación Sin gestor de geometría Para no tener gestor de geometría puede usarse el valor null. setLayout(null); Colocar manualmente los componentes en la posición y del tamaño que se desee: setLocation setSize setBounds
  • 51. 51 Técnicas de Programación La clase Insets Define un área de separación entre el borde de un contenedor y sus componentes. Constructor: Insets(int top, int left, int bottom, int right); Los contenedores implementan el método: Insets getInsets() Redefinirlo si deseamos cambiar la separación. public Insets getInsets() { return new Insets(20, 20, 20, 20); } Técnicas de Programación Eventos
  • 52. 52 Técnicas de Programación Eventos Los eventos representan la actividad entre el sistema, los programas y los usuarios. Se definen varios tipos de eventos. Técnicas de Programación Funcionamiento Normalmente: componentes generan eventos en respuesta a las acciones de los usuarios. objetos del usuario escuchan y atienden los eventos generados. Cuando se produce un evento: El generador invoca un método en todos los objetos escuchadores registrados. El método que se invoca depende del tipo de evento. Estos métodos se definen en varias interfaces llamadas escuchadoras. Las clases escuchadoras implementan interfaces escuchadoras.
  • 53. 53 Técnicas de Programación Funcionamiento Los objetos escuchadores deben registrarse en los generadores. addXXX y removeXXX XXX es el nombre de la interfaz escuchadora Ejemplo: boton.addActionListener(obj_escuchador); boton.removeActionListener(obj_escuchador); Técnicas de Programación Tipos de eventos Etc… ComponentListenerDialog, FrameComponentEvent WindowListenerDialog, FrameWindowEvent AdjustmentListenerScrollbarAdjustmentEvent MouseMotionListenerCanvas, Dialog, Frame, Panel, WindowMouseMotionEvent MouseListenerCanvas, Dialog, Frame, Panel, WindowMouseEvent KeyListenerComponentKeyEvent FocusListenerComponentFocusEvent ItemListenerCheckbox, CheckboxMenuItem, Choice, ListItemEvent ActionListenerButton, List, MenuItem, TextFieldActionEvent EscuchadorComponenteEvento
  • 54. 54 Técnicas de Programación Clases Adaptadoras Existen clases adaptadoras cuyo objetivo es evitar que las clases escuchadoras tengan que implementar todo el interfaz escuchador. Las clases adaptadoras implementan los métodos de las interfaces escuchadoras con un cuerpo vacío. Así, las clases escuchadoras sólo tienen que extender a los adaptadores y redefinir únicamente el cuerpo de los métodos que necesitan. Técnicas de Programación Métodos mouseClicked(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent) MouseListener MouseAdapter keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent) KeyListener KeyAdapter focusGained(FocusEvent) focusLost(FocusEvent) FocusListener FocusAdapter componentHidden(componentEvent) componentShown(componentEvent) componentMoved(componentEvent) componentResized(componentEvent) ComponentListener ComponentAdapter adjustmentValueChanged(AdjustmentEvent)AdjustmentListener actionPerformed(ActionEvent)ActionListener MétodosInterfaz
  • 55. 55 Técnicas de Programación Métodos textValueChanged(TextEvent)TextListener itemStateChanged(itemEvent)ItemListener windowOpened(WindowEvent) windowClosing(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent) WindowListener WindowAdapter mouseDragged(MouseEvent) mouseMoved(MouseEvent) MouseMotionListener MouseMotionAdapter MétodosInterfaz Técnicas de Programación Eventos de Acción Clase de evento: ActionEvent. Debe implementarse el interfaz ActionListener. Tiene un único método: void actionPerformed(ActionEvent event); Método de ActionEvent: String getActionCommand(); devuelve la etiqueta del generador Método de EventObject: Object getSource(); Devuelve objeto donde se genero el evento.
  • 56. 56 Técnicas de Programación Eventos de Teclado Clase de evento: KeyEvent. Debe implementarse el interfaz KeyListener. void keyTyped(KeyEvent event); void keyPressed(KeyEvent event); void keyReleased(KeyEvent event); Métodos de KeyEvent: // devuelve el codigo de la tecla. int getKeyCode() // devuelve el caracter de la tecla. // solo para teclas normales. char getKeyChar() // indica si es tecla de accion: // F1..F12, home, flechas, etc. boolean isActionKey(); La clase InputEvent define el manejo de los modificadores. Técnicas de Programación Códigos de Teclas KeyEvent.F1 . . . KeyEvent.F12 KeyEvent.LEFT KeyEvent.RIGHT KeyEvent.UP KeyEvent.DOWN KeyEvent.END KeyEvent.HOME KeyEvent.PGDN KeyEvent.PGUP KeyEvent.PRINT_SCREEN KeyEvent.SCROLL_LOCK KeyEvent.CAPS_LOCK KeyEvent.NUM_LOCK KeyEvent.PAUSE KeyEvent.INSERT KeyEvent.DELETE KeyEvent.ENTER KeyEvent.TAB KeyEvent.BACK_SPACE KeyEvent.ESCAPE
  • 57. 57 Técnicas de Programación Eventos de Ratón Clase de evento: MouseEvent. Existen dos interfaces escuchadores de eventos de ratón: MouseListener: todo menos movimiento. void mousePressed(MouseEvent event); void mouseReleased(MouseEvent event); void mouseClicked(MouseEvent event); void mouseEntered(MouseEvent event); void mouseExited(MouseEvent event); MouseMotionListener: eventos de movimiento. void mouseMoved(MouseEvent event); void mouseDragged(MouseEvent event); Métodos de MouseEvent: int getClickCount(); Point getPoint(); int getX(); int getY(); La clase InputEvent define el manejo de los modificadores. Técnicas de Programación La clase InputEvent KeyEvent y MouseEvent derivan de InputEvent. Define el manejo de los modificadores de teclas y de ratón. teclas de control, mayúsculas, alternativa, meta y los botones del ratón. Métodos de InputEvent: int getModifiers() // mapa de bits boolean isShiftDown() boolean isControlDown() boolean isMetaDown() long getWhen()
  • 58. 58 Técnicas de Programación Eventos de Ratón Ejemplo: Técnicas de Programación Eventos de Ratón Ejemplo: f.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent ev) { getGraphics().drawString("hi", ev.getX(), ev.getY()); } });
  • 59. 59 Técnicas de Programación Manejo Mapa de bits Códigos: InputEvent.ALT_MASK InputEvent.CTRL_MASK InputEvent.META_MASK InputEvent.SHIFT_MASK InputEvent.BUTTON1_MASK InputEvent.BUTTON2_MASK InputEvent.BUTTON3_MASK Ejemplo: InputEvent e; if ((e.getModifiers() & InputEvent.ALT_MASK)!= 0) { // la tecla ALT estaba pulsada. } Técnicas de Programación Los eventos ItemEvent Clase de evento: ItemEvent Debe implementarse el interfaz ItemListener. Tiene un único método: void itemStateChanged(ItemEvent event) Métodos de la clase ItemEvent: // Checkbox, CheckboxMenuItem y Choice: // objeto donde ocurrio el evento ItemSelectable getItemSelectable() // List: indice elemento seleccionado o deseleccionado. // Checkbox, CheckboxMenuItem y Choice: etiqueta elemento. Object getItem() // Checkbox, CheckboxMenuItem y Choice: estado // Estados validos: ItemEvent.SELECTED, // ItemEvent.DESELECTED int getStateChange()
  • 60. 60 Técnicas de Programación Los eventos AdjustmentEvent Clase de evento: AdjustmentEvent. Implementar interfaz AdjustmentListener. Tiene un único método: void adjustmentValueChanged(AdjustmentEvent e) Métodos de la clase AdjustmentEvent: int getAdjustmentType() // Devuelve:AdjustmentEvent.UNIT_INCREMENT // AdjustmentEvent.UNIT_DECREMENT // AdjustmentEvent.BLOCK_INCREMENT // AdjustmentEvent.BLOCK_DECREMENT // AdjustmentEvent.Track