Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ALGORITMICA II
GENERACIN DE EVENTOS
1. Las acciones tales como: pulsar un botn, mover el mouse, etc. son reconocidas e identificadas por los sistemas operativos (OS) o la JVM.
2. Por cada accin el OS/JVM determinan cul de los programas que se estn ejecutando recibirn la seal (de la accin).
GENERACIN DE EVENTOS
GUI Acciones Mouse, Teclado,etc.
Sistema Operativo
JAVA API /Windows
Eventos
Mtodos y handlers
Mtodos y handlers
Aplicacin 1
Aplicacin 2
MANEJO DE EVENTOS
Una aplicacin responde a los eventos ejecutando
cdigo adecuado para cada tipo particular de eventos. No todos los eventos necesitan ser tenidos en cuenta por
JAVA GUI
Java provee dos libreras para crear GUIs: Java AWT (Abstract Window Toolkit)
AWT
Swing
Accessibility
SWING
Implementada sin usar cdigo nativo (100% Java),
con lo cual la GUI se ver de la misma forma en distintas plataformas.
AWT Y SWING
Los componentes de Swing tienen nombres que
comienzan con J. Ejemplo: Button en AWT es JButton en Swing
PAQUETES JFC/SWING
javax.swing
javax.swing.plaf javax.swing.plaf.basic javax.swing.plaf.metal javax.swing.plaf.multi javax.swing.table javax.swing.tree javax.swing.border javax.swing.colorchooser javax.swing.filechooser
javax.swing.event javax.swing.undo
PAQUETES JFC/SWING
Control del Look & Feel de Swing
Componentes, incluyendo componentes complejos
JERARQUA DE HERENCIA
HERENCIA HEAVY
java.awt.Panel java.awt.Window
java.applet.Applet
java.awt.Dialog
JApplet
JDialog
JWindow
JFrame
CONTENEDORES EN SWING
java.awt.Container JMenu
JTabbedPane JDesktopPane
JOptionPane
JToolbar
Similar a AWT
Nuevos de Swing
COMPONENTES DE SWING
La clase Component (y sus subclases) proveen soporte
para manejo de eventos, cambio del tamao de un componente, control de color y fuentes, pintado.
CONTENEDORES
Anidamiento de componentes (Jerarqua de contenedores en contraste con la Jerarqua de herencia). Cada programa Swing contiene al menos una. Usan un Layout Manager para determinar cmo se disponen los componentes en los contenedores. Swing provee 4 contenedores de alto nivel (ventana base de la GUI): JFrame, JApplet, JDialog y JWindow. La jerarqua est compuesta de diferentes capas. Cada contenedor de alto nivel contiene un contenedor intermedio conocido como content pane . En casi todos los programas no es necesario conocer qu hay entre el contenedor de alto nivel y el content pane.
JERARQUA DE CONTENEDORES
JERARQUA DE CONTENEDORES
La apariencia de una GUI est determinada por: La jerarqua de contenedores El Layout Manager de cada contenedor Las propiedades de los componentes individuales Todos estos tems trabajan en conjunto para determinar el efecto visual final.
ESTRUCTURA DE UN JFRAME
ESTRUCTURA DE UN JFRAME
ROOT PANES
Aadido en forma invisible al contenedor de alto nivel.
CONTENT PANES
Usualmente es un JPanel. En la mayora de las aplicaciones Swing contiene casi todo, excepto la barra de men. Debe ser creado explcitamente.
LAYERED PANES
Provisto por root pane pero tambin puede crearse.
Contenedor con profundidad, tal que componentes que se superponen (ej:popup menus) pueden aparecer
GLASS PANES
Util para pintar o interceptar eventos (por ejemplo:
bloquear todos los eventos del mouse) en un rea que contenga uno o ms componente
Applet
Dialog
Frame
CONTENEDORES GENERALES
Panel
Scroll Pane
SplitPane
TabbedPane
Toolbar
CONTENEDORES ESPECIALES
InternalFrame
LayeredPane
Root Pane
JFRAME
Usual this
Ej.: myLabel
COMPONENTES ATMICOS
Componentes de tipo JPanel almacenan otros objetos de la GUI tales como: botones, etiquetas, campos de texto, etc. Estos objetos grficos son considerados componentes atmicos, puesto que no pueden almacenar otros objetos de la GUI.
Buttons
Combo Box
List
Menu
Slider
Spinner
Text Fields
Label
Progress Bar
Tool tip
Color Chooser
File Chooser
Table
Text
Tree
COMPONENTES GUI
1.- Crear Instanciar objeto: b = new JButton(press me); 2.- Configurar Propiedades: b.text = press me; (evitar en Java) Mtodos:
b2 = new JButton("Middle button", middleButtonIcon); b2.setVerticalTextPosition(AbstractButton.BOTTOM); b2.setHorizontalTextPosition(AbstractButton.CENTER); b2.setMnemonic(KeyEvent.VK_M); b2.setToolTipText("This middle button does nothing + "when you click it.");
CARACTERSTICAS ESPECIALES
Los componentes Swing ofrecen caractersticas especiales:
Tool tip
Cuando el cursor del mouse se detiene sobre un componente se muestra una lnea de texto.
Mnemonic Disable
Border
Se ejecuta una accin como resultado del pulsado de una combinacin de teclas. Un componente puede ser explcitamente habilitado o deshabilitado. Rodea un componente con un borde.
CARACTERSTICAS ESPECIALES
Tool tips
JButton button = new JButton ("Compute"); button.setToolTipText ("Calculate size.");
Mnemonic
button.setMnemonic ("C");
Disable
JButton button = new JButton (Do It); button.setEnabled (false);
CARACTERSTICAS ESPECIALES
Bordes
JPanel myPanel = new JPanel(); Border myBorder = BorderFactory.createEtchedBorder(); myPanel.setBorder(myBorder);
Empty
Line Etched Bevel
Titled
Matte Compound
BORDES
JPanel
JButton
JButton JLabel
JLabel
CONSTRUCCIN BOTTOM UP
Crear:
Frame Panel JLabel Listener
JButton
Componentes
Listener Aadir (bottom up) Listeners a los componentes Componentes al panel Panel al Frame JFrame
JPanel
WINDOW LAYOUT
contenedores
componentes
WINDOW LAYOUT
Cada contenedor maneja la disposicin de sus
componentes. El programador slo aade componentes, el contenedor
LAYOUT MANAGERS
Hay varios Layout Managers predefinidos en:
FlowLayout (en java.awt) BorderLayout (en java.awt)
CardLayout
GridLayout
(en java.awt)
(en java.awt)
BoxLayout
(en javax.swing)
BorderLayout n w c s e
CardLayout
GridBagLayout
One at a time
JButton
NULL LAYOUT
setLayout(null);
El programador es responsable de establecer el tamao y posicin de cada componente (setBounds(x,y,w,h))
COMBINACIONES
JButton JButton
JTextArea
COMBINACIONES
JButton JFrame n JPanel: BorderLayout JPanel: FlowLayout JButton
c JTextArea
de alineamiento:
setAllignmentX(float), setAlignmentY(float)
JPanel(BoxLayout(V))
label
rigidArea(0,5)
Center
JScrollPane South
JButton
FLOWLAYOUT
FLOWLAYOUT
Cada fila de componentes est centrada por defecto, pero puede alinearse por derecha o izquierda. Pueden establecerse explcitamente espacios verticales y/o horizontales entre componentes. Usar slo en aplicaciones muy simples (oculta componentes que no entran).
GRIDLAYOUT
Dispone los componentes en forma de matriz, con la cantidad de filas y columnas especificadas. Todas las filas tienen el mismo alto y todas las columnas tienen el mismo ancho. El tamao de cada celda es determinado por el tamao del contenedor. Permite establecer vgap y hgap. Usar si es seguro que los componentes tendrn igual tamao.
BORDERLAYOUT
BORDERLAYOUT
Si se agranda la ventana, la parte central toma tanto espacio como le sea posible, las otras 4 reas se expanden slo lo necesario para llenar el espacio disponible. Un contenedor, generalmente usa 1 o 2 de las 5 reas de BorderLayout. Por ejemplo: centro o centro y sur. Se puede especificar vgap y hgap.
CARDLAYOUT
cards.setLayout(new CardLayout());
cards.add(p1, "JPanel with JButtons");
GRIDBAGLAYOUT
Container contentPane = getContentPane(); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); contentPane.setLayout(gridbag); c.fill = GridBagConstraints.HORIZONTAL; Jbutton button = new JButton("Button 1"); c.weightx = 0.5; c.gridx = 0; c.gridy = 0; gridbag.setConstraints(button, c);
Es el LM ms sofisticado y flexible. Alinea componentes en una matriz de celdas permitiendo a algunos componentes abarcar ms de una celda.
BOXLAYOUT
BOXLAYOUT
Los componentes son dispuestos de arriba abajo o de
izquierda a derecha en el orden en el cual son aadidos al contenedor.
BOXLAYOUT
BoxLayout tiene en cuenta el alineamiento, tamaos
mnimos, mximos y preferidos que se eligen para los componentes:
btn.setAlignmentX(float alignmentX);
lbl.setAlignmentY(float alignmentY); lbl.setMaximumSize(new Dimension(int width, int height); lbl.setMinimumSize(new Dimension(int width, int height); lbl.setPreferredSize(new Dimension(int width, int height);
Para aadir espacio entre componentes se usa la clase Box o bordes invisibles a uno o ambos componentes.
BOXLAYOUT
Tipo
Rigid area horizont al vertical
Tamao
Cmo crearla?
Box.createRigidArea(size) Box.createHorizontalGlue() Box.createVerticalGlue() new Box.Filler(minSize, prefSize, maxSize)
Glue
customBox.Filler
PINTADO
Cuando la GUI necesita cambiar su apariencia visual
se pinta en la pantalla, comenzando siempre desde el contenedor de alto nivel (Ej.: JFrame o JApplet) y
PINTADO
Los componentes se pintan automticamente Todo lo dems:Programador
JButton
CUNDO SE PINTA?
Pintado disparado por el sistema (se invoca paint()) La primera vez que el componente es visible Cuando un componente es cubierto y luego descubierto Cuando es necesario reflejar un cambio en el estado del programa
Pintado disparado por la aplicacin Cuando cambia texto, colores,etc. Cuando desea repintar (invoca a repaint(), no a paint() que pone en la cola este requerimiento) El thread de manejos de eventos llama a paint() del componente
PINTADO
Pintado de un componente que extiende JComponent
PINTADO CUSTOM
JComponent paint paintComponent paintBorder paintChildren
extends
paint
PINTADO
Qu ocurre cuando se invoca paint()? paint(Graphics g) paintComponent(Graphics g) paintBorder(Graphics g) paintChildren(Graphics g) Antes de hacer cualquier cosa en paintComponent(...): invoque super.paintComponent (pinta background)
PINTADO
Cada componente tiene su propio sistema de coordenadas
desde (0,0) hasta (ancho-1, alto-1) (0, 0) X
Component
PINTADO
Tener en cuenta el borde del componente (si lo tiene),
reduce el rea de pintado y desplaza coordenadas.
OBJETO GRAPHICS
El objeto Graphics provee un contexto para el pintado y
mtodos para la misma funcin. El contexto grfico consiste en el estado actual:color de
PINTADO DE FORMAS
La clase Graphics define mtodos para pintar formas: void drawLine(int x0, int y0, int x1, int y1) void drawArc(int x, int y, int width, int height, int startAngle,int arcAngle) void drawPolygon(Polygon p) void drawPolygon(int xPoints[ ], int yPoints[ ], int numPoints) void drawRect(int x, int y, int width, int height) void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) void draw3DRect(int x, int y, int width, int height, boolean raised) void drawOval(int x, int y, int width, int height)
PINTADO DE FORMAS
PINTADO DE TEXTO
La clase Graphics define mtodos para pintar texto: String (drawString)
PINTADO DE TEXTO
La clase Graphics define mtodos para pintar texto: String (drawString)
IMGENES
Cargar y mostrar imgenes es muy simple Class ImageIcon de javax.swing. Ej.:ImageIcon myIcon=new ImageIcon(imagefile.gif); Image image3 = getImage( new URL("http://java.sun.com/graphics/people.gif"));
IMGENES
JButton JButton
JButWrite.setIcon(myImage2);
JButton
JButChange.setRolloverEnabled(true); JButChange.setRolloverIcon(myImage4);
CARGA DE IMGENES
myImage = Toolkit.getDefaultToolkit().getImage(filenameOrURL);
retorna inmediatamente, no hay que esperar que la imagen se
MOSTRAR IMGENES
Mtodos grficos:(invocar en paintComponent) drawImage(image, x, y, observer) drawImage(image, x, y, w, h, observer) drawImage(image, x, y, bgcol, observer) drawImage(image, x, y, w, h, bgcol, ob.) La clase Component implementa la interface ImageObserver, casi siempre el ltimo argumento es this
IMGENES
class MyPanel extends JPanel {
IMGENES
ANIMACIN
Se muestran sucesivos frames a una velocidad
relativamente alta (usualmente 10-20 frames por segundo), se crea una sensacin de movimiento
ANIMACIN
Timer
Timer timer = new Timer(delay, this); //this:action handler