Topicos Avanzados de Programacion
Topicos Avanzados de Programacion
Topicos Avanzados de Programacion
Avanzados de Programacin
Objetivo:
Desarrollar soluciones de software utilizando programacin concurrente, programacin de eventos, que soporte interfaz grfica y comunicacin con dispositivos mviles. TIPOS DE PROGRAMAS EN FUNCION AL TIPO DE INTERACCION Secuenciales: reciben los datos de entrada, realizan un conjunto de operaciones o clculos y muestran la salida por ejemplo: comando dir de Ms-Dos Interactivos: exigen la intervencin del usuario en tiempo de ejecucin, pero el programa realiza acciones independientemente de las rdenes del usuario - por ejemplo: juego en tiempo real (deportes, estrategia, ...) Dirigidos por eventos: el programa espera la llegada de un evento (orden del usuario, ...), cuando el evento se produce realiza la accin correspondiente y vuelve a esperar - por ejemplo: procesador de texto PROGRAMACION ORIENTADO A EVENTOS Evento: Accin asncrona, generalmente provocada por el usuario Ejemplo: Pulsacin del botn del ratn Pulsacin de tecla Modificacin del estado de un control ( Maximizar, minimizar una ventana ) Arrastrar el ratn Introducir texto en un determinado campo En un programa dirigido por eventos: El programador escribe mtodos para manejar los eventos La aplicacin espera a que llegue un evento Cuando el sistema detecta un evento llama a su manejador asociado El usuario dispara la ejecucin de las acciones a diferencia de las aplicaciones tradicionales donde las acciones las iniciaba la propia aplicacin Cada vez que se produce un evento, Java crea un objeto de una determinada clase de evento, y este
TIPOS DE EVENTOS ComponentEvent: Se producir este tipo de evento cuando el usuario mueva o redimensione un componente. FocusEvent: Se producir este tipo de evento cuando se cambie el foco de un componente. KeyEvent: Se producir cuando el usuario pulse una tecla. MouseEvent: Se producir cuando el usuario efecte un movimiento con el ratn o haga un click. ContainerEvent: Se producir cuando se aadan o eliminen componentes en el contenedor. WindowEvent: Se producir cuando se realice algn tipo de operacin con la ventana como abrirla y cerrarla. ActionEvent: Se producir cuando se efecte alguna accin sobre un componente, como por ejemplo: la pulsacin de un botn. AdjustmentEvent: Se ajusta algn valor de un componente. ItemEvent: Se ha modificado el estado de algn elemento que pertenece al componente. TextEvent: El contenido de texto de algn componente ha cambiado. Para cada evento con nombre xxxEvent, se define una interfaz llamada xxxListener en la que se definen los mtodos que van a manejarse relacionados con ese evento
Este modelo est basado en la delegacin (la responsabilidad de gestionar un evento que ocurre en un objeto source la tiene otro objeto listener) Fuentes de Eventos (event sources) Receptores de Eventos (event listener) Adaptadores (adapter clases) Fuente de Eventos (event sources) Son objetos que detectan eventos y notifican a los receptores que se han producido dichos eventos. Ejemplo: Botones sobre los que se pulsa Campos de texto que pierde el foco Campos de texto sobre el que se presiona una tecla Ventanas que se cierran Receptor del Evento (event listener) Para poder capturar todos los eventos, Java proporciona las interfaces las cuales tienen la funcin de escuchar los eventos que se generan en nuestra aplicacin (listeners). Para cada tipo de evento existe una interfaz que escucha. COMO IMPLEMENTAR UNA INTERFAZ EN MI PROGRAMA DENTRO DE LA CLASE JUNTO CON EL COMPONENTE class MiClase implements ActionListener { { public MiClase() { { Button btn = new Button("Boton"); btn.addActionListener(this); } public void actionPerformed(ActionEvent e) { { // Aqui va el codigo de la accion!!! } }
Button btn = new Button("Boton"); btn.addActionListener( new ActionListener() { { public void actionPerformed(ActionEven e) { { // Aqui va el codigo de la accion } });
Tienen como objetivo evitar la tediosa tarea de tener que implementar todos los mtodos de las interfaces listener Por ello existe una clase adaptadora por cada interface listener que tiene ms de un mtodo: java.awt.event.ComponentAdapter java.awt.event.ContainerAdapter java.awt.event.FocusAdapter java.awt.event.KeyAdapter java.awt.event.MouseAdapter java.awt.event.MouseMotionAdapter java.awt.event.WindowAdapter Las clases adaptadoras implementan los mtodos de la interface correspondiente como vacios. Ejemplo:
class ClaseGestorRaton extends MouseAdapter {{ public void mousePressed (MouseEvent evento) {{ System.out.println ("Boton ratn pulsado"); if ((evento.getModifiers() & InputEvent.BUTTON3_MASK) != 0) {{ System.out.println (El botn pulsado es el de la derecha"); // mismo comportamiento con InputEvent.META_MASK } } }
Eventos, interfaces y mtodos de escucha ActionEvent ActionListener addActionListener() AdjustmentEvent AdjustmentListener addAdjustmentListener() ComponentEvent ComponentListener addComponentListener Componentes que lo generan JButton, JList, JTextField, JmenuItem, JCheckBoxMenuItem, JMenu, JpopupMenu JScrollbar y cualquier objeto que implemente la interface Adjustable Component, JButton, JCanvas, JCheckBox, JComboBox, Container, JPanel, JApllet, JScrollPane, Window, JDialog, JFileDialog, JFrame, JLabel, JList, JScrollbar, JTextArea, JtextField Container, JPanel, JApplet, JScrollPane, Window, JDialog, JFileDialog, JFrame Component, JButton, JCanvas, JCheckBox, JComboBox, Container, JPanel, JApplet, JScrollPane, Window, JDialog,
JFileDialog, JFrame, JLabel, JList, JScrollbar, JTextArea, JTextField Component, JButton, JCanvas, JCheckBox, JComboBox, Container, JPanel, JApplet, JScrollPane, Window, JDialog, JFileDialog, JFrame, JLabel, JList, JScrollbar, JTextArea, JTextField Component, JButton, JCanvas, JCheckBox, JComboBox, Container, JPanel, JApplet, JScrollPane, Window, JDialog, JFileDialog, JFrame, JLabel, JList, JScrollbar, JTextArea, JTextField Window, JDialog, JFileDialog, JFrame
INTERFACES GRAFICAS DE USUARIO Hasta ahora hemos desarrollado programas que usan la consola para interactuar con el usuario, siendo esta forma de interfaz muy simple y nos ha permitido centrarnos en todo que tiene que ver tan solo la programacin orientada a objetos con el lenguaje Java, sin tener que tratar al mismo tiempo con ventanas, botones y otros elementos similares. Las interfaces graficas de usuario (GUI) ofrecen al usuario ventanas, cuadros de dialogo barras de herramientas, botones, listas desplegables y muchos otros elementos con los que ya estamos acostumbrados a manipular. LIBRERIAS JAVA PARA LA CREACION DE GUIs AWT : Abstract Window Toolkit SWING: Mas moderna, basada en AWT ELEMENTOS DE UNA GUI COMPONENTES Son clases de objetos que permiten utilizar elementos graficos para crear interfaces graficas. Un componente tambin tiene un representacin grafica, que se puede mostrar en pantalla y con la que puede interactuar el usuario. Ejemplos: Botones AWT Button
Etiquetas
Es un botn usado para recibir el clic del raton Isc. Rubn Torres Fras
JDialog JFrame JLabel JList JMenu JMenuItem JPanel JScrollBar JScrollPAne JTextArea
Es un cuadro de dialogo con una ventana con titulo y bordes Es una marco o una ventana y es la clase de todas las ventanas GUI Es una cadena de texto Componente que tiene un conjunto dinamico de elementos Es un elemento dentro de la barra de men, el cual contiene un conjunto de elementos Un elemento dentro del men Una clase contenedora bsica usanda frecuentemente para crear diseos complejos Un componente que permite al usuarios hacer una dentro de un rango de valores Clase contenedora que implementa un deslizador horizontal y vertical para un nico componente hijo Un componente que permite al usuario introducir texto en un bloque o rectangulo
VENTANAS: CONFIGURANDO EL LAYOUT DE UN CONTENEDOR Varias componentes pueden contener otras componentes dentro, para determinar de qu modo esos componentes se organizarn visualmente, entonces se utiliza el concepto de Layout. Por ejemplo, el siguiente cdigo crea un frame y coloca el layout del pao de contenidos (porcin central de la ventana) con BorderLayout y finalmente agrega una etiqueta al sur de la ventana.
JFrame frame= new Jframe(); frame.getContentPane().setLayout(new BorderLayout()); JLabel label=new JLabel("yo voy abajo"); frame.add(label, BorderLayout.SOUTH);
EJERCICIO 1: Codigo que implementa una calculadora basica con el uso de elementos graficos y realice el manejo de los eventos necesarios.
/** * * @author isctorres */ public class Calculadora_10 {{ char valores[] = {'7','8','9','/','4','5','6','*','1','2','3','','0','.','+','='}; JFrame contenedor; JPanel superior,inferior; JTextField resultado; JButton ArBoton[] = new JButton[16]; public Calculadora_10() { PanelSup(); PanelInf(); CrearCal(); } void PanelSup() { superior = new JPanel(); superior.setLayout(new FlowLayout());
MENUS: Java ofrece varias clases para poner mens en una ventana: JMenuBar JMenu JMenuItem JCheckBoxMenuItem JRadioButtonMenuItem Un JFrame o JApplet puede guardar una barra de men donde se cuelgan mens desplegables. Los mens tienen elementos de men que puede seleccionar el usuario. Las barras de mens se pueden contemplar como una estructura que soporta mens. EJERCICIO 2 Implementar una calculadora mediante el uso de mens donde se realice el manejo de los eventos con el uso de Escuchadores y Adaptadores
/** * * @author isctorres */ public class CALCULADORA extends JFrame{ //JFrame contenedor; JMenuBar menu; JPanel pCal; JMenuItem ItmSuma,ItmResta,ItmMulti,ItmDivis,ItmSalir; JTextField ope1,ope2,resultado; JLabel operador,opresul; JMenu opemenu, opesalir; /** * @param args the command line arguments
public Compo_Swing() { ventana = new JFrame("Componentes Swing"); ventana.setLayout(new BoxLayout(ventana.getContentPane(), BoxLayout.Y_AXIS)); // CREACION DEL PANEL Y MODIFICACION DE SUS PROPIEDADES pcompo = new JPanel(); pcompo.setBackground(Color.red);
public static void main(String[] args) { // TODO code application logic here new Compo_Swing(); } }
GRAFICOS Y JAVA 2D En esta seccin veremos varias de las herramientas de Java para dibujar figuras bidimensionales, controlar colores y fuentes. Para empezar a dibujar en Java, primero debemos entender su sistema de coordenadas, el cual es un esquema para identificar a cada uno de los posibles puntos en la pantalla. De manera predeterminada, la esquina superior izquierda de un componente de la GUI (como una ventana) tiene las coordenadas (0,0). Un par de coordenadas est compuesto por una coordenada x (la coordenada horizontal) y una coordenada y (la coordenada vertical). La coordenada x es la distancia horizontal que se desplaza hacia la derecha, desde la parte izquierda de la pantalla. La coordenada y es la distancia vertical que se desplaza hacia abajo, desde la parte superior de la pantalla. El eje x describe cada una de las coordenadas horizontales, y el eje y describe cada una de las coordenadas verticales. Las coordenadas se utilizan para indicar en dnde deben mostrarse los grficos en una pantalla. Las unidades de las coordenadas se miden en pxeles (lo que se conoce como elementos de imagen). Un pxel es la unidad ms pequea de resolucin de un monitor de computadora.
En la siguiente figura se muestra una parte de la jerarqua de clases de Java que incluye varias de las clases de grficos bsicas y las clases e interfaces de la API Java 2D. La clase Color contiene mtodos y constantes para manipular los colores. La clase JComponent contiene el mtodo paintComponent, que se utiliza para dibujar grficos en un componente. La clase Font contiene mtodos y constantes para manejar los tipos de letras. La clase FontMetrics contiene mtodos y constantes para manipular tipos de letras. La clase Graphics contiene mtodos para dibujar cadenas, lneas, rectngulos y dems figuras. La clase Graphics2D, que extiende a la clase Graphics, se utiliza para dibujar con la API Java 2D. La clase Polygon contiene mtodos para crear polgonos. La mitad inferior de la figura muestra varias clases e interfaces de la API Java 2D. La clase BasicStroke ayuda a especificar las caractersticas de dibujo de las lneas. Las clases GradientPaint y Texture Paint ayudan a especificar las caractersticas para rellenar figuras con colores o patrones. Las clases GeneralPath, Line2D, Arc2D, Ellipse2D, Rectangle2D y RoundRectangle2D representan varias figuras de Java 2D.
Un contexto de grficos permite dibujar en la pantalla. Un objeto Graphics administra un contexto de grficos y dibuja pxeles en la pantalla que representan texto y otros objetos grficos (como lneas, elipses, rectngulos y otros polgonos). Los objetos Graphics contienen mtodos para dibujar, manipular tipos de letra, manipular colores y varias cosas ms. La clase Graphics es una clase abstract La clase JComponent (paquete javax.swing), que hereda de manera indirecta de la clase Component, contiene un mtodo llamado paintComponent, que puede utilizarse para dibujar grficos. El mtodo paintComponent toma un objeto Graphics como argumento. El sistema pasa este objeto al mtodo paintComponent cuando se requiere volver a pintar un componente ligero de Swing. El encabezado del mtodo paintComponent es: public void paintComponent( Graphics g ) EJERCICIO 1 Codifiquemos el siguiente ejemplo
package clasegraphics; import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author isctorres */ // Heredamos de la clas JPanel el cual implementa el metodo paintComponent public class ClaseGraphics extends JPanel {{ @Override // Sobrecargamos el metodo
// muestra los valores RGB individuales Color color = Color.MAGENTA; g.setColor( color ); g.fillRect( 15, 100, 100, 20 ); g.drawString( "Valores RGB: " + color.getRed() + ", " + color.getGreen() + ", " + color.getBlue(), 130, 115 ); } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here // CREAMOS EL FRAME QUE CONTENDRA EL PANEL JFrame frame = new JFrame("Ejemplo de Graphics"); // DEFINIMOS LA ACCION QUE SE REALIZARA CUANDO SE CIERRE LA APLICACION frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // INSTANCIAMOS EL PANEL EL CUAL AL MOMENTO DE CARGARSE LLAMA AL METODO paintComponent ClaseGraphics panel = new ClaseGraphics(); // AGREGAMOS EL PANEL AL JFRAME frame.add(panel); // DETERMINAMOS EL TAMANO DEL JFRAME frame.setSize(400, 180); // VISUALIZAMOS EL JFRAME frame.setVisible(true); } }
package graphics_figuras; import java.awt.Color; import java.awt.Graphics; import java.util.Locale; import javax.swing.JFrame; import javax.swing.JPanel; /** * * @author isctorres */ public class Graphics_Figuras extends JPanel {{ /** * @param args the command line arguments */ @Override public void paintComponent( Graphics g ) { g.setColor(Color.red); g.drawLine(5,30,380, 30); g.setColor(Color.BLUE); g.drawRect( 5, 40, 90, 55 ); g.fillRect( 100, 40, 90, 55 ); g.setColor( Color.CYAN ); g.fillRoundRect( 195, 40, 90, 55, 50, 50 ); g.drawRoundRect( 290, 40, 90, 55, 20, 20 ); g.setColor( Color.GREEN ); g.draw3DRect( 5, 100, 90, 55, true ); g.fill3DRect( 100, 100, 90, 55, false );
public void drawLine( int x1, int y1, int x2, int y2 ) Dibuja una lnea entre el punto (x1, y1) y el punto (x2, y2). public void drawRect( int x, int y, int anchura, int altura ) Dibuja un rectngulo con la anchura y altura especifi cadas. La esquina superior izquierda del rectngulo tiene las coordenadas (x, y). Slo el contorno del rectngulo se dibuja usando el color del objeto Graphics; el cuerpo del rectngulo no se rellena con este color. public void fillRect( int x, int y, int anchura, int altura ) Dibuja un rectngulo relleno con la anchura y altura especificadas. La esquina superior izquierda del rectngulo tiene las coordenadas (x, y). public void clearRect( int x, int y, int anchura, int altura ) Dibuja un rectngulo relleno con la anchura y altura especificadas, en el color de fondo actual. Isc. Rubn Torres Fras
La esquina superior izquierda del rectngulo tiene las coordenadas (x, y). Este mtodo es til si el programador desea eliminar una porcin de una imagen. public void drawRoundRect( int x, int y, int anchura, int altura, int anchuraArco, int alturaArco ) Dibuja un rectngulo con esquinas redondeadas, en el color actual y con la anchura y altura especificadas. Los valores de anchuraArco y alturaArco determinan el grado de redondez de las esquinas (vea la figura anterior). Slo se dibuja el contorno de la figura. public void fillRoundRect( int x, int y, int anchura, int altura, int anchuraArco,int alturaArco ) Dibuja un rectngulo relleno con esquinas redondeadas, en el color actual y con la anchura y altura especificadas. Los valores de anchuraArco y alturaArco determinan el grado de redondez de las esquinas (vea la figura anterior). public void draw3DRect( int x, int y, int anchura, int altura, boolean b ) Dibuja un rectngulo tridimensional en el color actual, con la anchura y altura especificadas. La esquina superior izquierda del rectngulo tiene las coordenadas (x, y). El rectngulo aparece con relieve cuando b es true y sin relieve cuando b es false. Slo se dibuja el contorno de la figura. public void fill3DRect( int x, int y, int anchura, int altura, boolean b ) Dibuja un rectngulo tridimensional relleno en el color actual, con la anchura y altura especificadas. La esquina superior izquierda del rectngulo tiene las coordenadas (x, y). El rectngulo aparece con relieve cuando b es true y sin relieve cuando b es false. public void drawOval( int x, int y, int anchura, int altura ) Dibuja un valo en el color actual, con la anchura y altura especificadas. La esquina superior izquierda del rectngulo imaginario que lo rodea tiene las coordenadas (x, y). El valo toca los cuatro lados del rectngulo imaginario en el centro de cada uno de los lados (vea la siguiente figura). Slo se dibuja el contorno de la fi gura. public void fillOval( int x, int y, int anchura, int altura ) Dibuja un valo relleno en el color actual, con la anchura y altura especificadas. La esquina superior izquierda del rectngulo imaginario que lo rodea tiene las coordenadas (x, y). El valo toca los cuatro lados del rectngulo imaginario en el centro de cada uno de los lados.