Tópicos Selectos de Programación UNIDAD I.- Elementos de Interfaces Gráficas ___________________________________________________________________ LECCIÓN 1.2.- Librerías de Interfaz Gráfica ___________________________________________________________________ 1.2.1.- Librerías gráficas de Java En java existen varios paquetes para manejo de la interfaz gráfica: – AWT (Abstract Window Toolkit): Paquete básico para el diseño de interfaces gráficas de Java. – Swing: A partir de la versión 1.2, para crear interfaces gráficas profesionales con independencia de plataforma. – Java2D: Para manejar objetos gráficos (lineas, elipses, curvas) como objetos y aplicar transformaciones sobre estos (rotación, escalado). – Java3D: Para manipular vistas tridimensionales de objetos gráficos. Elementos gráficos Toda interfaz gráfica tiene: – Componentes: Objetos que representan un elemento gráfico (botón, cuadro de texto) – Contenedores: Objetos que contienen componentes (Ventanas, Cuadros de Dialogo) – Administradores de diseño: Objetos que controlan la forma en que se ordenan y acomodan los componentes dentro de un contenedor. – Contexto gráfico: Área de un componente gráfico donde se puden dibujar primitivas gráficas (lineas, curvas) y colocar imágenes. Rafael Rivera López 1 Tópicos Selectos de Programación 1.2.2.- Componentes gráficos Un componente es un objeto que tiene una representación gráfica que puede ser presentada en una pantalla y puede interactuar con el usuario. La clase abstracta Component contiene los métodos comúnes para todos los componentes gráficos. Tabla 2.1.- Métodos más utilizados en un componente gráfico Método Descripción setSize(int largo,int ancho) Define el tamaño del componete setLocation(int x, int y) Define la ubicación del componente setBounds(int x, int y, int largo, int ancho) Define la ubicación y tamaño del componente setBackground(Color color) Define el color de fondo del componente Rafael Rivera López 2 Tópicos Selectos de Programación Tabla 2.1.- Métodos más utilizados en un componente gráfico Método Descripción paint(Graphics g) Permite dibujar primitivas gráficas dentro del componente 1.2.3.- Contenedores gráficos Un contenedor es un componente gráfico que tiene la capacidad de almacenar otros componentes gráficos. Tabla 2.2.- Métodos más utilizados en un contenedor gráfico. Método Descripción add(Component x) Adiciona un componente al contenedor remove(Component x) Remueve un compoenente del contenedor setLayout(LayoutManager x) Define cual es el administrador de diseño de contenedor Frame: Un frame es una ventana con un título, un ícono asociado, un tipo de cursor asociado y una barra de menú (opcional). Rafael Rivera López 3 Tópicos Selectos de Programación Se pueden crear ventanas de dos formas: – Creando un objeto dentro de la clase aplicación – Creando una clase instanciable que herede de Frame. – Creando un objeto de la clase Frame import java.awt.*; public class Ventana{ public static void main(String[] args){ Frame f = new Frame("Primera Ventana"); f.setSize(300,300); f.setLocation(200,100); f.setBackground(Color.cyan); f.setVisible(true); } } Rafael Rivera López 4 Tópicos Selectos de Programación Creando un clase instanciable que herede de Frame package nuevaventana; import java.awt.*; //Clase Instanciable public class MiVentana extends Frame{ public MiVentana(){ super("Mi Ventana"); setSize(300,300); setLocation(200,100); setBackground(Color.cyan); addComponentes(); } public MiVentana(Color color){ this(); setBackground(color); } } public void addComponentes(){ Button b = new Button("Aceptar"); add(b); } package nuevaventana; public class Main { public static void main(String[] args) { MiVentana v = new MiVentana(); v.setVisible(true); MiVentana y = new MiVentana(java.awt.Color.BLUE); y.setVisible(true); // Se crea un objeto anónimo new MiVentana(java.awt.Color.yellow).setVisible(true); } } Rafael Rivera López 5 Tópicos Selectos de Programación 1.2.4.- Administradores de diseño – Un administrador de diseño (layout) es un objeto que se encarga de controlar la ubicación y apariencia de los componentes dentro de un contenedor. – Se activa con el método setLayout(LayoutManager x) – Si no se indica, se tiene ya uno predefinido: – – Para objetos que derivan de Window (Frame, Dialog) es BorderLayout() – Para objetos que derivan de Panel (Panel, Applet) es FlowLayout Adicionando un componente al contenedor: Se utiliza un método definido por el usuario denominado addComponentes() – Si no se indica el administrador de diseño, Frame usan BorderLayout y el componente se coloca en toda la ventana, porque no se indico su ubicación package layouts; import java.awt.*; public class MiVentana extends Frame{ public MiVentana(){ super("Ventana con un botón"); setSize(200,200); setLocation(5,300); setBackground(Color.WHITE); addComponentes(); setVisible(true); } } public void addComponentes(){ add(new Button("Botón")); } Rafael Rivera López 6 Tópicos Selectos de Programación Tabla 2.3.- Administradores de diseño para contenedores en Java Layout Descripción BorderLayout Divide el contexto gráfico en cinco áreas. Se debe indicar en que área se adiciona el componente. Se utiliza una constante o un String: Norte: BorderLayout.NORTH ó “North” Sur: BorderLayout.SOUTH ó “South” Centro: BorderLayout.CENTER ó “Center” Este: BorderLayout.EAST ó “East” Oeste: BorderLayout.WEST ó “West” FlowLayout Coloca a los componentes al centro del contenedor, en la parte superior y ajusta el tamaño del componente al mínimo. GridLayout Divide el contexto gráfico en una malla de n líneas y m columnas CardLayout Coloca a los componentes en una pila donde solo está visible un componente. GridBagLayout Divide al contexto gráfico en secciones cuyo tamaño es definido por el usuario. Ventana con FlowLayout: package layouts; import java.awt.*; public class MiVentana1 extends Frame{ public MiVentana1(){ super("Ventana con FlowLayout"); setSize(300,300); setLocation(10,10); setBackground(Color.cyan); addComponentes(); setVisible(true); } public void addComponentes(){ setLayout(new FlowLayout()); add(new Button("Ok")); add(new Button("Cancel")); } } Rafael Rivera López 7 Tópicos Selectos de Programación Ventana con dos o mas contenedores: Un contenedor es un componentes, por lo que puede estar contenido en otro contenedro import java.awt.*; public class MiVentana2 extends Frame{ public MiVentana2(){ super("Ventana con dos contenedores"); setSize(300,300); setLocation(340,100); setBackground(Color.orange); addComponentes(); setVisible(true); } public void addComponentes(){ // Un Frame tiene BorderLayout add(new Label("Captura un Texto"),"North"); add(new TextArea(200,200),"Center"); // Un panel es un contenedor con FlowLayout Panel p = new Panel(); add(p,"South"); p.add(new Button("Aceptar")); p.add(new Button("Cancelar")); } } Ventana con GridLayout: package layouts; import java.awt.*; public class MiVentana3 extends Frame{ public MiVentana3(){ super("Primera Calculadora"); setSize(200,250); setLocation(450,300); setBackground(Color.WHITE); addComponentes(); setVisible(true); } Rafael Rivera López 8 Tópicos Selectos de Programación public void addComponentes(){ Panel p1 = new Panel(); Panel p2 = new Panel(); add(new TextField(),"North"); add(p1,"Center"); add(p2,"East"); add(new Button("="),"South"); // Se define una malla para el panel p1 p1.setLayout(new GridLayout(3,3)); for(int i=1;i<=9;i++) p1.add(new Button(""+i)); // Se define otra malla para el panel p2 p2.setLayout(new GridLayout(2,1)); p2.add(new Button("+")); p2.add(new Button("-")); } } Ventana con CardLayout: package layouts; import java.awt.*; public class MiVentana4 extends Frame{ public MiVentana4(){ super("Ventana con CardLayout"); setSize(200,250); setLocation(450,300); setBackground(Color.WHITE); addComponentes(); setVisible(true); } public void addComponentes(){ CardLayout c = new CardLayout(); setLayout(c); add(new Button("Boton inicial"),"1"); add(new TextArea(40,80),"2"); add(new Label("Etiqueta"),"3"); c.show(this,"1"); Rafael Rivera López 9 Tópicos Selectos de Programación } setVisible(true); for(int i=0;i<8;i++){ try{ Thread.sleep(1000); } catch(InterruptedException e){ System.err.println("error!"+e); } c.next(this); } } Se necesita una referencia para el administrador de diseño: CardLayout c = new CardLayout(); setLayout(c); Se adiciona indicando una etiqueta: add(new Button("Boton inicial"),"1"); add(new TextArea(40,80),"2"); add(new Label("Etiqueta"),"3"); Se indica con show cual es el primer componente a presentar c.show(this,"1"); Se indica con next que se cambie el componente: c.next(this); Sin Layout: Utilizando setLayout(null) se indica que no se va a utilizar un administrador de diseño package layouts; import java.awt.*; public class MiVentana5 extends Frame{ public MiVentana5(){ super("Ventana sin Layout"); setSize(200,250); setLocation(100,100); Rafael Rivera López 10 Tópicos Selectos de Programación setBackground(Color.YELLOW); addComponentes(); setVisible(true); } } public void addComponentes(){ setLayout(null); Button b1 = new Button("Aceptar"); Button b2 = new Button("Cancelar"); b1.setBackground(Color.GREEN); b1.setLocation(50,40); b1.setSize(100,40); b2.setBounds(100,200,40,40); add(b1); add(b2); } Rafael Rivera López 11