Академический Документы
Профессиональный Документы
Культура Документы
Programacion 2
Jhomara Luzuriaga
Container
JComponent
Panel Applet ..
AbstractButton ..
JTextComponent
..
JFrame
JDialog
JButton
JTextField
JTextArea
1.3. CONTENEDORES 1.3.1. Clase JFrame JAVA Frame es el componente, control u objeto principal de una aplicacion visual o grafica en java. Para crear un Frame deberemos crear una instancia de JFrame, y si deseamos modificar algunas propiedades de la ventana debemos crear una clase que extienda de JFrame. Ejemplo:
import javax.swing.*; class Frame extends JFrame { //el constuctor public Frame(){ //Este es uno de los mtodos que nuestra clase Frame ha //heredado de JFrame. Pone un ttulo a la ventana setTitle("Hola!!!"); //mtodo heredado que le da un tamao a la ventana setSize(300,200); setVisible(true); } }
Las ventanas JFrame son invisibles por defecto, se debe modificar la propiedad por defecto de JFrame de manera que nuestra ventana sea visible, para esto se sobreescribe el mtodo setVisible(true) con el parmetro true.
Programacion 2 Jhomara Luzuriaga
Algunos mtodos de JFrame son: setResizable(boolean): Permite hacer modificable el tamao de la ventana setState(int): Modificar el tamao de la ventana, recibe como parmetro un valor entero que corresponde a una constante de JFrame, que puede ser: JFrame.NORMAL, JFrame.ICONFIED. setExtendedState(int): Permite ampliar los estados de una ventana. setLocationRelativeTo(Component): Ubicar un componente en base a un segundo componente enviado como parmetro. Para ubicar la ventana en el centro de la pantalla el parmetro deber ser null. EJERCICIO: Crear un proyecto DiseoVentanas y en una clase ejecutable crear 5 ventanas, cada una visualizada en un estado diferente (minimizado, maximizado, max_horizontal, max_vertical, y normal centrado), estableciendo un ttulo en cada una con el estado de la ventana. 1.3.2. Clase JDialog JDialog es un Componente que sirve para presentar dilogos que son ventanas auxiliares que se presentan cuando se registra un evento dentro de un programa, sirven para prevencin o en su defecto se puede utilizar para dar informacin sobre algo, los dilogos que JDialog muestra pueden ser modales o no modales, esto quiere decir que si son modales la ventana del dilogo bloquea las entradas a otras ventanas, este tipo de dilogos se pueden hacer tambin con JOptionPane. Todos los dilogos dependen de un frame, las modificaciones que se le hagan al frame afectaran a el dilogo, en caso de que el frame sea cerrado, minizado o maximizado, sus dilogos tendrn el mismo comportamiento Un JDialog siempre deber tener un componente Parent del cual se derive, que debe ser un contenedor de alto nivel y su efecto modal o no, de manera que cuando se crea una instancia de esta clase se deber establecer estos parmetros. Ejemplo:
Frame ventana= new Frame(); JDialog cuadroDialogo= new JDialog(ventana, true);
Programacion 2
Jhomara Luzuriaga
En este caso hemos creado un JDialog cuyo parent es un JFrame ventana. Los JDialog obedecen un evento, es decir se mostrarn cuando sobre el parent se realice algn evento que invoque la aparicin del JDialog. 1.3.3. Clase JPanel JPanel es un objeto de los llamados "contenedores". Es as porque sirven para contener otros objetos. Una de las ventajas de aadir paneles sobre nuestro frame es que los paneles al derivar de JComponent poseen el mtodo paintComponent que permite dibujar y escribir texto sobre el panel de modo sencillo. Para aadir un JPanel a nuestro frame primero obtenemos uno de los objetos que forman el frame: el panel contenedor (content pane). Para ello invocaremos al mtodo getContentPane de nuestro JFrame. El objeto que nos devuelve ser de tipo Container:
Container [nombre_del_contentpane] = frame.getContentPane();
A continuacin invocamos al mtodo add del Container obtenido para aadir el panel, pasndole el propio panel al mtodo:
[nombre_del_contentpane].add(nombre_del_panel);
Ejemplo:
import javax.swing.*; import java.awt.event.*; import java.awt.*; class Frame extends JFrame { public Frame(){ setTitle("Hola!!!"); setSize(300,200); //Le pido al Frame su objeto contenedor Container contentpane = getContentPane(); //Creo un objeto de tipo JPanel JPanel panel = new JPanel(); //Aado el panel en el objeto contenedor del frame contentpane.add(panel); //Pongo el color de fondo del panel de color rojo panel.setBackground(Color.RED); } }
Programacion 2
Jhomara Luzuriaga
Para agregar componentes a un panel se utiliza el mtodo add: panel.add(new JButton(Click aqu)); Si no sealamos la ubicacin de los componentes en el panel, stos se ubican conforme se vayan aadiendo de manera horizontal, uno despus de otro en todo el ancho de la ventana. Para visualizar el Frame que hemos creado se aade a la clase el mtodo main dentro del cual se crear un objeto de nuestra clase Frame. La clase JFrame implementa la interfaz Runneable, la cual permite ejecutar y visualizar el Frame hasta que el usuario lo cancele.
public static void main(String[] args) { new Frame(); }
1.4. ALGUNOS COMPONENTES SIMPLES Todos los contenedores as como los componentes tienen propiedades que se pueden modificar mediante los mtodos de la clase que corresponden, as como sus respectivos constructores. Clase JLabel Es una etiqueta de texto que podemos colocar al lado de cualquier componente para darle una indicacin al usuario de cul es la funcin de dicho componente. Tambin se puede emplear a modo de ttulo. JLabel label = new JLabel("1 x 7 = 7");
Clases JTextArea, JTextPane y JTextField Son componentes bsicos del Swing de Java y su funcin principal es la de capturar texto ingresado desde teclado por el usuario. Clase JTextField Est pensado para obtener texto del usuario, este teclear en l y cuando pulse intro podremos disponer del texto que tecle. nicamente se puede recoger una lnea de texto.
Programacion 2
Jhomara Luzuriaga
EJEMPLO:
public class Frame1 extends JFrame { public Frame1() { setTitle("DATOS"); setSize(300, 200); JLabel lbl1 = new JLabel("Nombre"); JTextField txt1 = new JTextField(18); JLabel lbl2 = new JLabel("Edad"); JTextField txt2 = new JTextField(10); Container contentpane = getContentPane(); JPanel panel = new JPanel(); panel.setBackground(Color.CYAN); panel.add(lbl1); panel.add(txt1); panel.add(lbl2); panel.add(txt2); contentpane.add(panel); setVisible(true); } }
EJECUCIN
Clase JPasswordField Al igual que los anteriores permite al Usuario ingresar un texto que es reemplazado por un carcter que oculta lo que se escribe, por ejemplo: *. Se emplea para pedirle passwords al usuario y evitar que puedan ser ledas por alguien. Clase JButton Esta clase nos permite crear botones, cuya accin al pulsar ser programado con el manejo de eventos. Para crear un botn podemos utilizar los siguientes constructores: JButton() Crea un botn sin etiqueta JButton(String label) Crea un botn con una etiqueta de texto JButton t=new JButton(Derecha);
Programacion 2
Jhomara Luzuriaga
EJEMPLO:
public Frame2() { setTitle("DATOS"); setSize(300, 200); JLabel lbl1 = new JLabel("Nombre"); JTextField txt1 = new JTextField(18); JLabel lbl2 = new JLabel("Edad"); JTextField txt2 = new JTextField(10); Container contentpane = getContentPane(); JPanel panel = new JPanel(); panel.add(lbl1); panel.add(txt1); panel.add(lbl2); panel.add(txt2); panel.add(new JButton("Click aqu")); contentpane.add(panel); setVisible(true); }
EJERCICIO: Escriba 4 mtodos para cambiar el estado de un botn, una etiqueta y un cuadro de texto: ...... .. .. .. ...... .. .. .. ...... .. .. ..
Programacion 2
Jhomara Luzuriaga
Clase JComboBox Permite seleccionar un objeto (opcin) de una lista que se visualiza al dar click en la pestaa de este componente. Los constructores de la clase son: JComboBox(ComboBoxModel amodel); Requiere un objeto Modelo para el ComboBox JComboBox(Object [] items); Crea un combo, cuyos items correspondern al arreglo de objetos. JComboBox(Vector? items); Crea un combo, cuyos items correspondern a los elementos del Vector. EJEMPLO:
public class Selector extends JFrame { public Selector() { setTitle("Selector!!!"); setSize(300, 200); String[] opciones = {"Arriba", "Abajo", "Derecha", "Izquierda", "Todas las direcciones"}; JComboBox cmbLista = new JComboBox(opciones); Container contentpane = getContentPane(); JPanel panel = new JPanel(); panel.add(cmbLista); contentpane.add(panel); setLocationRelativeTo(null); setVisible(true); } }
Clase JCheckbox Se trata de un componente empleado para tomar informacin del usuario sobre cosas del tipo s, no. Dos de los constructores de un JCheckBox son: o JCheckBox(String) Crea un JCheckBox con etiqueta
Programacion 2
Jhomara Luzuriaga
Clase JRadioButton Dos de los constructores de un JRadioButton son: o JRadioButton (String) Crea un JRadioButton con etiqueta o JRadioButton(String,boolean) Crea un JRadioButton con etiqueta y aparece seleccionado Para utilizar este componente debe ser aadido a un grupo de manera que permita seleccionar una sola opcin entre las del grupo. Para ello se utiliza el componente ButtonGroup. Ejemplo:
ButtonGroup bg= new ButtonGroup(); JRadioButton rb1=new JRadioButton("Radio1"); JRadioButton rb2=new JRadioButton("Radio2"); bg.add(rb1); bg.add(rb2); ... panel.add(rb1); panel.add(rb2); ... ...
Ejercicio: Crea una clase EjercicioSwing que extienda de JFrame y que contenga los componentes de la siguiente figura. El tamao del Frame ser de (260 x 250).
Programacion 2
Jhomara Luzuriaga
2. LAYOUT MANAGERS
2.1. Concepto El layout manager es el encargado de decidir en qu posiciones se renderizarn los componentes, que tamao tendrn, que porcin del contenedor abarcarn, etc. Un contenedor es un componente Java que puede contener otros componentes. Si queremos cambiar el layout manager de un contenedor en un momento dado, tan slo tendremos que llamar al mtodo: contenedor.setLayout(LayoutManager layout); Si en cualquier momento decidimos encargarnos nosotros mismos de la gestin de componentes tan slo tendremos que escribir: contenedor.setLayout(null); Cada componente de nuestro interfaz grfico tiene asignada una coordenada horizontal, una coordenada vertical, una longitud y una anchura determinadas. Estos valores sern los que se utilizarn para renderizar el componente en pantalla. La clase java.awt.Component nos ofrece una serie de mtodos para poder modificar los valores de los atributos anteriores: public void setSize(Dimension size); public void setBounds(Rectangle r);
2.2. Layout null Muchos deciden no utilizar layouts para ubicar los componentes de la ventana, en este caso el Layout se establece a Nulll y en el cdigo se decide la posicin de cada botn y qu tamao ocupa.
contenedor.setLayout(null); // Eliminamos el layout contenedor.add (boton); // Aadimos el botn boton.setBounds (10,10,40,20); // Botn en posicion 10,10 con ancho 40 pixels y alto 20
Esto, no es recomendable. Si se expande la ventana los componentes seguirn en su sitio, no se expandirn con la ventana. Si cambiamos de sistema operativo,
Programacion 2 Jhomara Luzuriaga
resolucin de pantalla o fuente de letra, los componentes no se visualizarn estticamente bien. 2.3. FlowLayout Es el que tienen los paneles por defecto. Los objetos se van colocando en filas en el mismo orden en que se aadieron al contenedor. Cuando se llena una fila se pasa a la siguiente. Tiene tres posibles constructores:
FlowLayout();
Adems de la alineacin de los componentes indica un espaciado (gap) entre los distintos componentes, de tal modo que no aparecen unos junto a otros. FlowLayout respeta siempre el tamao preferido de cada componente. Los componentes de cada fila se encuentran equiespaciados por un espacio de 5 puntos horizontal y verticalmente. Primero se establece el layout a utilizar, luego se aaden los componentes al panel.
contenedor.setLayout(new FlowLayout()); contenedor.add(boton); contenedor.add(textField); contenedor.add(checkBox);
Ejemplo:
import javax.swing.*; import java.awt.*; class TestFlowLayout extends JFrame{ public static void main(String[] args) { TestFlowLayout frame = new TestFlowLayout ();
Programacion 2
Jhomara Luzuriaga
JPanel panel = new JPanel(); JButton boton1 = new JButton("botn 1"); JButton boton2 = new JButton("Este es el botn 2"); JButton boton3 = new JButton("botn 3"); panel.add(boton1); panel.add(boton2); panel.add(boton3); frame.setContentPane(panel); frame.setSize(350, 150); frame.setTitle("Prueba de FlowLayout"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
2.4. BorderLayout Este layout distribuye los componentes en cinco zonas predeterminadas: son norte (NORTH), sur (SOUTH), este (EAST), oeste (WEST) y centro (CENTER). Si no especificamos ninguna regin por defecto el componente se inserta en el centro del contenedor.
Programacion 2
Jhomara Luzuriaga
El segundo crear el layout dejando los espacios horizontales y verticales entre sus distintas zonas. Al momento de aadir componentes se debe especificar en el mtodo add la regin donde queremos aadir el componente: panel.add(componente_a_aadir, BorderLayout.NORTH); Ejemplo:
class TestBorderLayout extends JFrame{ public static void main(String[] args) { TestBorderLayout frame = new TestBorderLayout (); Container panel = frame.getContentPane(); JButton norte = new JButton("Norte"); JButton sur = new JButton("Sur"); JButton este = new JButton("Este"); JButton oeste = new JButton("Oeste"); JButton centro = new JButton("Centro"); panel.add(norte, BorderLayout.NORTH); panel.add(sur, BorderLayout.SOUTH); panel.add(este, BorderLayout.EAST); panel.add(oeste, BorderLayout.WEST); panel.add(centro, BorderLayout.CENTER); frame.setSize(350, 250); frame.setTitle("Prueba de BorderLayoutLayout"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true);} } }
2.5. GridLayout Distribuye los componentes de un contenedor en celdas y se ordenarn en el orden como sean aadidas, de izquierda a derecha y de arriba hacia abajo. El GridLayout es adecuado para hacer tableros, calculadoras en que todos los botones son iguales, etc.
Programacion 2
Jhomara Luzuriaga
Todas las cuadrculas sern del mismo tamao y crecern o se harn ms pequeas hasta ocupar toda el rea del contenedor. Hay dos posibles constructores: GridLayout(int filas, int columnas);
GridLayout(int gat_vertical); columnas, int filas, int gap_horizontal, int
Programacion 2
Jhomara Luzuriaga
2.6. GridBagLayout El GridBagLayout es de los layouts ms verstiles y complejos de usar. Es como el GridLayout, pone los componentes en forma de matriz (cuadrcula), pero permite que las celdas y los componentes en ellas tengan tamaos variados. Las celdas se crean a medida que se agregan los componentes.
Es posible hacer que un componente ocupe varias celdas Un componente puede expandirse o no con su celda Si no se expande, puede quedar en el centro de la celda o pegarse a sus bordes o esquinas. Las columnas al igual que las filas pueden ensancharse o no al estirar la ventana y la proporcin podemos decidirla
GridBagConstraints es una clase en cuyos atributos se guarda informacin de cmo y dnde aadir el componente. GridBagConstraints.gridx nos dice la posicin x del componente, es decir, el nmero de columna en la que est el componente, siendo la columna 0 la primera columna de la izquierda. GridBagConstraints.gridy nos dice la posicin y del componente, es decir, el nmero de fila en la que est el componente, siendo la fila 0 la primera fila de la parte de arriba. c.gridx=1, c.gridy=0
c.gridx=0, c.gridy=0
GridBagConstraints.gridwidth nos dice cuntas celdas en horizontal debe ocupar el componente. El ancho del componente. GridBagConstraints.gridheight nos dice cuantas celdas en vertical debe ocupar el componente. El alto del componente. Su valor puede ser: Un nmero cardinal, en este caso indica exactamente el nmero de filas o columnas que ocupar el componente. GridBagConstraints.RELATIVE, indica que el componente ocupar el espacio disponible desde la fila o columna actual hasta la ltima fila o columna disponibles. GridBagConstraints.REMAINDER, indica que el componente es el ltimo de la fila actual o columna actual.
c.gridwidth=GridBagCostraints.RELATIVE c.gridheigth=1
c.gridwidth=GridBagCostraints.REMAINDER c.gridheigth=1
c.gridwidth=1 c.gridheigth=1
c.gridwidth=GridBagCostraints.RELATIVE c.gridheigth=GridBagConstraints.RELATIVE
c.gridwidth=GridBagCostraints.REMAINDER c.gridheigth=GridBagConstraints.REMAINDER
c.gridwidth=GridBagCostraints.REMAINDER c.gridheigth=GridBagConstraints.RELATIVE
Algunas constantes de esta clase son: Anchor establece la alineacin del componente, se utiliza cuando el ste es ms pequeo que el rea utilizada: NORTH, SOUTH, EAST, WEAST, NORTHWEST,
SOUTHWEST, NORTHEAST, SOUTHEAST y CENTER.
Programacion 2
Jhomara Luzuriaga
En este caso las celdas ocupan todo el contenedor, pero eso es debido a que se ha utilizado los atributos weightx y weighty. weightx y weighty Los atributos weightx y weighty especifican el porcentaje de espacio libre que ocupar una celda determinada. En el ejemplo anterior si no utilizamos estos atributos tendramos:
Programacion 2
Jhomara Luzuriaga
Este espacio libre (flechas verdes) se dividir entre todas las celdas que especifiquen valores dentro de los atributos weightx y weighty. La forma de especificar el espacio que quiere ocupar cada componente es mediante un nmero entre 0.0 y 1.0. Este nmero representa al porcentaje de espacio libre que ocupar cada celda.
Insets El atributo insets es un objeto de la clase java.awt.Insets cuyo constructor es: Insets(int top, int left, int bottom, int right)
Programacion 2
Jhomara Luzuriaga
Los parmetros del constructor especifican el espacio que se dejar de mrgen. Veamos un ejemplo:
public class TestGridBagLayout extends JFrame{ public static void main(String[] args) { TestGridBagLayout f=new TestGridBagLayout(); Container container = f.getContentPane(); container.setLayout(new GridBagLayout()); ((JPanel) container).setBorder( BorderFactory.createTitledBorder("Entrada al sistema")); GridBagConstraints c = new GridBagConstraints(); c.weightx = 0.4; c.weighty = 1.0; c.gridwidth = GridBagConstraints.RELATIVE; c.gridheight = GridBagConstraints.RELATIVE; c.fill = GridBagConstraints.BOTH; c.anchor = GridBagConstraints.WEST; c.insets = new Insets(2, 5, 2, 0); container.add(new JLabel("Usuario"), c); //Se debe definir los parmetros para cada uno de los componentes. c.gridwidth = GridBagConstraints.REMAINDER; c.gridheight = GridBagConstraints.RELATIVE; Programacion 2 Jhomara Luzuriaga
c.weightx = 1.0; c.insets = new Insets(2, 0, 2, 5); container.add(new JTextField(), c); c.gridwidth = GridBagConstraints.RELATIVE; c.gridheight = GridBagConstraints.REMAINDER; c.weightx = 0.4; c.insets = new Insets(2, 5, 2, 0); container.add(new JLabel("Contrasea"), c); c.gridwidth = GridBagConstraints.REMAINDER; c.gridheight = GridBagConstraints.REMAINDER; c.weightx = 1.0; c.insets = new Insets(2, 0, 2, 5); container.add(new JTextField(), c); f.setSize(220, 110); f.setTitle("Login"); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
Resultado:
2.7. BoxLayout Este layout manager es uno de los ms sencillos y de los ms tiles. Aqu los componentes son agrupados horizontal o verticalmente dentro del contenedor que los contiene. Los componentes no se solapan de ningn modo. La anidacin de paneles utilizando este layout manager nos puede permitir crear interfaces muy complejos como nos permite GridBagLayout pero a costa de la creacin de objetos pesados como son paneles. El constructor de BoxLayout es muy simple: public BoxLayout(Container objetivo, int eje); Donde el parmetro entero eje puede tomar los valores: X_AXIS, los componentes se organizan de izquierda a derecha y en horizontal. Y_AXIS, los componentes se organizan de arriba a abajo y en vertical. LINE_AXIS, los componentes se organizan como si estuviesen en una lnea. Para ello se tiene en cuenta la propiedad ComponentOrientation del contenedor. Si esta propiedad es horizontal entonces los componentes se organizarn
Programacion 2
Jhomara Luzuriaga
horizontalmente y adems segn su valor lo harn de izquierda a derecha o de derecha a izquierda. En otro caso se organizarn verticalmente de arriba a abajo. PAGE_AXIS, los componentes se organizan como si estuvieran en una pgina. Para ello se tiene en cuenta la propiedad ComponentOrientation del contenedor.
Los componentes se organizan en el orden en el que se aaden al contenedor. En el caso de organizacin horizontal, BoxLayout intentar que todos los componentes del contenedor tengan la misma altura, siendo esta la mxima de los elementos del contenedor. En caso de que no sea posible, BoxLayout intentar alinearlos a todos horizontalmente de modo que sus centros coincidan en una lnea horizontal imaginaria que los atraviese, de manera similar, si la organizacin es vertical. A menudo, en lugar de utilizar BoxLayout directamente, se utiliza la clase Box que es un contenedor ligero que tiene como layout manager un BoxLayout y que ofrece mtodos que hacen que su manejo sea muy sencillo. EJEMPLO:
import java.awt.*; import javax.swing.*;
public class TestBoxLayout extends JFrame { public static void main(String[] args) { TestBoxLayout f = new TestBoxLayout(); Container container = f.getContentPane(); container.setLayout(new BoxLayout(container, BoxLayout.X_AXIS)); ((JPanel) container).setBorder( BorderFactory.createTitledBorder("Demo BoxLayout")); JPanel panel1 = new JPanel(); panel1.setBorder(BorderFactory.createTitledBorder("Panel1")); JPanel panel2 = new JPanel(); panel2.setBorder(BorderFactory.createTitledBorder("Panel2")); panel1.setLayout(new BoxLayout(panel1, BoxLayout.Y_AXIS)); panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS)); for (int i = 0; i < 3; i++) { panel1.add(new JButton("Botn nmero " + i)); panel2.add(new JButton("Botn nmero " + i)); } container.add(panel1); container.add(panel2); f.setSize(285, 300); f.setTitle("Demo BoxLayout"); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } Programacion 2 Jhomara Luzuriaga
2.8. SpringLayout Este layout manager est nicamente disponible a partir de la versin 1.4 del JDK. SpringLayout define los componentes que estarn dentro del interfaz y la relacin entre estos componentes, es decir, el espacio que habr entre ellos. SpringLayout intentar respetar siempre que pueda el tamao preferido de los componentes. El espacio entre los componentes se define utilizando objetos Spring. Cada objeto Spring tiene cuatro propiedades, sus tamaos mximo, mnimo y preferido junto con su tamao actual. (x, y, width, height) Todos estos objetos Spring se acumulan formando un conjunto de restricciones que estarn en un objeto de tipo SpringLayout.Constraints. Para crear un objeto Spring: Spring.constant(min, pref, max); Spring.constant(int valor); El mtodo para ubicar un componente aplicando constraint tespecto de otro: putConstraint(borde, componente, constraint, borde, componenteRelativo);
Programacion 2
Jhomara Luzuriaga
Ejemplo:
public class TestSpringLayout extends JFrame{ public static void main(String[] args) { TestSpringLayout f=new TestSpringLayout(); SpringLayout sl=new SpringLayout(); Container container = f.getContentPane(); container.setLayout(sl); ((JPanel)container).setBorder(BorderFactory.createTitledBorder( "Entrada al sistema")); JLabel lblUsuario =new JLabel("Usuario"); JLabel lblContrasea=new JLabel("Contrasea"); JTextField txtUsuario=new JTextField(10); JTextField txtContrasea=new JTextField(10); container.add(lblUsuario); container.add(txtUsuario); container.add(lblContrasea); container.add(txtContrasea); sl.putConstraint(SpringLayout.WEST, lblUsuario, Spring.constant(30),SpringLayout.WEST,container); sl.putConstraint(SpringLayout.NORTH, lblUsuario, Spring.constant(20),SpringLayout.NORTH,container); sl.putConstraint(SpringLayout.WEST,txtUsuario, Spring.constant(35),SpringLayout.EAST,lblUsuario); sl.putConstraint(SpringLayout.NORTH, txtUsuario, Spring.constant(20),SpringLayout.NORTH,container); sl.putConstraint(SpringLayout.WEST, lblContrasea, Spring.constant(30),SpringLayout.WEST,container); sl.putConstraint(SpringLayout.NORTH, lblContrasea, Spring.constant(25),SpringLayout.NORTH,lblUsuario); sl.putConstraint(SpringLayout.WEST,txtContrasea, Spring.constant(15),SpringLayout.EAST,lblContrasea); sl.putConstraint(SpringLayout.NORTH, txtContrasea, Spring.constant(25),SpringLayout.NORTH,txtUsuario); f.setSize(250, 150); f.setTitle("Login"); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
Programacion 2
Jhomara Luzuriaga
EJERCICIO: Disee la siguiente pantalla utilizando el Layout ms indicado para la ubicacin de los componentes en el Frame
Programacion 2
Jhomara Luzuriaga
JMenuItem
EJEMPLO:
public class VentanaMenu extends JFrame{ public JMenuBar barraMenu=new JMenuBar(); public VentanaMenu(){ super("Test Menu"); setSize(300,200); agregarComponentes(); } public void agregarComponentes(){ JMenu mnArchivo=new JMenu("Archivo"); mnArchivo.add(new JMenuItem("Nuevo")); mnArchivo.add(new JMenuItem("Guardar",new ImageIcon(getClass().getResource("zip.gif")))); mnArchivo.add(new JMenuItem("Abrir")); mnArchivo.add(new JMenuItem("Cerrar")); barraMenu.add(mnArchivo); JMenu mnEditar=new JMenu("Editar"); JMenu mnAyuda=new JMenu("Ayuda"); barraMenu.add(mnEditar); barraMenu.add(mnAyuda); BorderLayout bl=new BorderLayout(); this.getContentPane().setLayout(bl); this.getContentPane().add(barraMenu,BorderLayout.NORTH); } public static void main(String[] args) { new VentanaMenu().setVisible(true); }
Programacion 2
Jhomara Luzuriaga
RESULTADO:
Ejercicio: Modifique la clase anterior para: Agregar al Menu Archivo el menu Guardar Como y a ste los tems: Imagen, Texto, Articulo Completo. Agregar en el Menu Editar los tems: Deshacer, Rehacer, Seleccionar Todo, Buscar. Agregar una imagen en los Menus de la barra principal.
Clase JScrollPane Es un panel que permite visualizar un componente de un tamao mayor que el disponible, mediante el uso de barras de desplazamiento.
Como su nombre lo indica, funciona como un contenedor, de manera que podemos agregar un componente que requiera mayor espacio en el Frame.
JLabel imagen=new JLabel(new ImageIcon(getClass().getResource( "/imagenes/imagen1.jpg"))); JScrollPane panel=new JScrollPane(imagen);
Programacion 2
Jhomara Luzuriaga
Clase JSplitPane Permite visualizar dos componentes, uno a cada lado, con la posibilidad de modificar la cantidad de espacio otorgado a cada uno. Se puede agregar un contenedor como un JPanel en cada lado del Split y este a su vez contener ms componentes. Adems se puede modificar una propiedad que indica la disposicin de los componentes: horizontal o vertical.
//espacio del primer componente con respecto del segundo split.setDividerLocation(150); //separacin entre componentes del Split split.setDividerSize(20); //cambiando el componente de la izquierda y derecha split.setLeftComponent(componenteIzquierda); split.setRightComponent(componenteDerecha);
Ubicar el primer componente con mayor ventaja que el segundo, con respecto al tamao del contenedor principal y una divisin de 20pix.
Programacion 2
Jhomara Luzuriaga
Clase JTabbedPane Permite definir varias hojas con pestaas, que pueden contener otros componentes. El componente bsico de cada hoja debe ser un Panel que es el que agrupe el resto de componentes. Para agregar ms hojas basta con aadir un panel al TabbedPane.
Ejemplo:
JTabbedPane tabbed=new JTabbedPane(); tabbed.add("Tabbed 1", new JPanel()); tabbed.add("Tabbed 2",new JPanel());
3.2. COMPONENTES CON MODELO DE DATOS. Los componentes que permiten mostrar un listado o un conjunto de objetos se pueden crear a partir de un modelo de datos. Por ejemplo un componente sencillo como el JComboBox contiene un arreglo de objetos. 3.2.1. JLIST Un componente JList permite administrar una lista de elementos de tipo Object con una representacin en String Los constructores de la clase JList son:
JList() JList(ListModel dataModel) JList(Object[ ] listData) JList(Vector? listData)
El segundo constructor recibe un objeto tipo ListModel, como sta es una interface utilizaremos una clase que la implementa: DefaultListModel
Programacion 2
Jhomara Luzuriaga
DefaultListModel modeloLista=new DefaultListModel(); Un objeto de esta clase puede implementar el mtodo addElement(Object o). modeloLista.addElement(Elemento1);//Object d e tipo String. modeloLista.addElement(Elemento2); JList lista=new JList(modeloLista);// Se crea un JList con el modelo de elementos. Ejemplo:
public class Lista extends JFrame{ private JList listaCursos; private DefaultListModel modeloListaCursos; public Lista() { agregarComponentes(); setTitle("CURSOS"); setContentPane(p); setSize(250, 200) } public void agregarComponentes(){ modeloListaCursos=new DefaultListModel(); modeloListaCursos.addElement("C++"); modeloListaCursos.addElement("Java"); modeloListaCursos.addElement("OpenOffice"); modeloListaCursos.addElement("Linux"); modeloListaCursos.addElement("Phyton"); listaCursos=new JList(modeloListaCursos); JPanel p=new JPanel(); p.setBorder(BorderFactory.createTitledBorder("Lista de Cursos")); p.add(listaCursos); } public static void main(String []args){ new Lista().setVisible(true); } }
Resultado:
Programacion 2
Jhomara Luzuriaga
EJERCICIO Crear un Proyecto denominado ComponentesAvanzados y dentro del paquete ventanas disear un clase VentanaPrincipal que extienda de JFrame y que tenga los constructores necesarios para modificar sus propiedades. Crear una clase ComponenteLista que permita utilizar la VentanaPrincipal para aadir un JList similar al ejemplo, que contenga la lista de 5 estudiantes del saln.
3.2.2. JTABLE JTable es uno de los componentes con APIs ms extensas y tambin son complejos, esa complejidad le permite ser ms personalizable y potente. Los constructores que proporciona esta clase son:
JTable() JTable(int numRows, int numColumns) JTable(Object[][] rowData, Object[] columnNames) JTable(TableModel dm) JTable(TableModel dm, TableColumnModel cm) JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm) JTable(Vector rowData, Vector columnNames)
El primer constructor permite crear un JTable con las propiedades por defecto, el segundo crea la tabla como una matrz de numRows x numColumns. Vamos a ver un ejemplo utilizando el constructor, que permite crear una tabla con una matriz de datos (rowData) y los nombres de las columnas contenidos en un array de String.
Programacion 2
Jhomara Luzuriaga
Object[][] data = { {"Maria", "Castro", "Esquiar", new Integer(5), new Boolean(false)}, {"Lucas", "Herrera", "Patinar", new Integer(3), new Boolean(true)}, {"Kthya", "Espinoza", "Escalar", new Integer(2), new Boolean(false)}, {"Marco", "Molina", "Correr", new Integer(7), new Boolean(true)}, {"Angela", "Daz", "Nadar", new Integer(4), new Boolean(false)}};
Ejemplo:
import import import import import java.awt.BorderLayout; java.awt.Dimension; javax.swing.JFrame; javax.swing.JScrollPane; javax.swing.JTable;
public class EjemploTabla1 extends JFrame{ public EjemploTabla1() { super("Ejemplo 1"); //array bidimencional de objetos con los datos de la tabla Object[][] data = { {"Maria", "Castro", "Esquiar", new Integer(5), new Boolean(false)}, {"Lucas", "Herrera", "Patinar", new Integer(3), new Boolean(true)}, {"Kthya", "Espinoza", "Escalar", new Integer(2), new Boolean(false)}, {"Marco", "Molina", "Correr", new Integer(7), new Boolean(true)}, {"Angela", "Daz", "Nadar", new Integer(4), new Boolean(false)}}; //array de String's con los ttulos de las columnas String[] columnNames = {"Nombre", "Apellido", "Pasatiempo", "Aos de Practica", "Soltero(a)"}; //se crea la Tabla JTable table = new JTable(data, columnNames); table.setPreferredScrollableViewportSize(new Dimension(500, 70)); //Creamos un JscrollPane y le agregamos la JTable
Programacion 2
Jhomara Luzuriaga
JScrollPane scrollPane = new JScrollPane(table); //Agregamos el JScrollPane al contenedor getContentPane().add(scrollPane, BorderLayout.CENTER); } public static void main(String[] args) { EjemploTabla1 frame = new EjemploTabla1(); frame.pack(); frame.setVisible(true); } }
Modelo de tabla Los modelos de tabla son objetos que implementan la interface TableModel; a travs de ellos es posible personalizar mucho ms y mejor el comportamiento de los componentes JTable, permitiendo utilizar al mximo sus potencialidades. Todas las tablas cuentan con un modelo de tabla, aunque en el ejemplo 1 no se haya especificado, existe uno por omisin La clase AbstractTableModel es la que implementa directamente a la interface TableModel, aunque es esta clase la que se recomienda extender para utilizarla como modelo de tabla, existe un modelo de tabla predeterminado que facilita mucho el trabajo con tablas. Este modelo predeterminado es la clase DefaultTableModel DefaultTableModel Esta clase tiene el siguiente diagrama de herencia:
java.lang.Object | +-javax.swing.table.AbstractTableModel | +-javax.swing.table.DefautTableModel
Nuevamente, antes de comenzar a utilizar esta clase, veremos cuales son los constructores con que cuenta:
DefaultTableModel() DefaultTableModel(int numRows, int numColumns) DefaultTableModel(Object[][] data, Object[] columnNames) DefaultTableModel(Object[] columnNames, int numRows) DefaultTableModel(Vector columnNames, int numRows) DefaultTableModel(Vector data, Vector columNames)
Programacion 2
Jhomara Luzuriaga
Utilizaremos el constructor que nos permite crear un DefaultTableModel, a partir de los datos con que ya contamos del ejemplo anterior: Por lo tanto, el constructor queda as:
DefaultTableModel dtm= new DefaultTableModel(data, columnNames);
Despues de haber creado el modelo de tabla, dtm en el ejemplo, se crea la tabla con el constructor correspondiente:
JTable table = new JTable(dtm);
Una vez hecho esto, cualquier modificacin que se realice sobre el modelo de tabla se reflejar directamente en la tabla. Agregar una columna:
String[] newColumn= {"Contabilidad", "Informatica", "Medicina", "Musica", "Diseo"}; dtm.addColumn("Carrera",newColumn);
Modificar una celda en especial, en este ejemplo la celda ubicada en la columna 1, fila 1:
dtm.setValueAt("Catherine", 1, 1);
Puedes revisar los mtodos que proporciona la clase DefaultTableModel para conocer qu otras cosas puedes realizar con ella. Ejemplo
import import import import import javax.swing.JTable; javax.swing.table.DefaultTableModel; javax.swing.JScrollPane; javax.swing.JPanel; javax.swing.JFrame;
public class EjemploTabla2 extends JFrame { public EjemploTabla2() { super("Ejemplo 2"); //array bidimencional de objetos con los datos de la tabla Object[][] data = { {"Maria","Castro", "Esquiar", new Integer(5), new Boolean(false)}, {"Lucas", "Herrera", "Patinar", new Integer(3), new Boolean(true)},
Programacion 2
Jhomara Luzuriaga
{"Kthya","Espinoza", "Escalar", new Integer(2), new Boolean(false)}, {"Marco", "Molina", "Correr", new Integer(7), new Boolean(true)}, {"Angela","Daz", "Nadar", new Integer(4), new Boolean(false)}}; //array de String's con los ttulos de las columnas String[] columnNames = {"Nombre", "Apellido", "Pasatiempo", "Aos de Practica", "Soltero(a)"}; //creamos el Modelo de la tabla con los datos anteriores DefaultTableModel dtm= new DefaultTableModel(data, columnNames); //se crea la Tabla con el modelo DefaultTableModel final JTable tabla = new JTable(dtm); // una vez creada la tabla con su modelo // podemos agregar columnas String[] newColumn= {"Contabilidad", "Informatica", "Medicina", "Musica", "Diseo" }; dtm.addColumn("Carrera",newColumn); //filas Object[] newRow={"Jos", "Ordez", "Tenis", new Integer(5), new Boolean(false), "Informatica"}; dtm.addRow(newRow); //o modificar una celda en especifico dtm.setValueAt("Sofa", 1, 1); //se define el tamao tabla.setPreferredScrollableViewportSize(new Dimension(500, 70)); //Creamos un JscrollPane y le agregamos la JTable JScrollPane scrollPane = new JScrollPane(tabla); //Agregamos el JScrollPane al contenedor getContentPane().add(scrollPane, BorderLayout.CENTER); } public static void main(String[] args) { EjemploTabla2 frame = new EjemploTabla2(); frame.pack(); frame.setVisible(true); } }
AbstractTableModel
Con esta clase es posible implementar, de una manera ms completa y eficiente, los mtodos necesarios para crear un modelo de tabla. Para crear un modelo de tabla personalizado, lo primero que necesitamos es extender la clase AbstractTableModel.
class MyTableModel extends AbstractTableModel { ..... }
Programacion 2
Jhomara Luzuriaga
class MyTableModel extends AbstractTableModel { public int getRowCount(){ ... } public int getColumnCount(){ ... } public Object getValueAt(int row, int column){ ... } }
Con la implementacin de los mtodos anteriores, las celdas de la tabla NO sern editables y NO se podrn modificar los valores de cada una de ellas. Si deseamos tener un mecanismo para modificar los valores de las celdas de la tabla, tenemos que sobrescribir el mtodo setValueAt de la clase AbstractTableModel:
class MyTableModel extends AbstractTableModel { ... ... public void setValueAt(Object value, int row, int col) { ... } }
Y, si la modificacin de los valores de las celdas, se hace directamente sobre ellas, necesitamos indicar a nuestro modelo de tabla que las celdas de la tabla sern editables, esto se hace sobrescribiendo el mtodo isCellEditable:
class MyTableModel extends AbstractTableModel { ... public boolean isCellEditable(int row, int col) { ... } }
Ya lo nico que hara falta sera agregar los nombres de las columnas de nuestra tabla y definir su contenido inicial:
class MyTableModel extends AbstractTableModel { final String[] columnNames = { ... } final Object[][] data = { ... } ... }
Programacion 2
Jhomara Luzuriaga
JTable invoca un mtodo del modelo de tabla para determinar el editor/renderer predeterminado que utilizar para mostrar el valor de cada celda. Por ejemplo para celdas con valores booleanos utilizar check box's; este mtodo es: getColumnClass, y tambin es recomendable implementarlo:
class MyTableModel extends AbstractTableModel { ... public Class getColumnClass(int c) { ... } }
Ejercicio Crear un proyecto ProyectoTablaSwing dentro del cual tendremos el paquete modelo con las clases ModeloTablaEstudiante y Estudiante:
Estudiante - id: int - nombre: String - apellido: String - carrera: String - modulo: String - paralelo: String - promedio: double
Adicionalmente un paquete presentacion contiene la clase VentanaEstudiantes que ser el frame con la tabla de estudiantes. Disea una clase Ejecutable que permita crear 5 estudiantes y almacenarlos en un Vector de manera que se pueda crear el Modelo de la tabla con estos datos.
JTree Al igual que JTable su creacin se basa en un modelo que permite definir el nodo raz y los nodos hoja del componente.
Programacion 2
Jhomara Luzuriaga
Retorna un JTree cuyos nodos hoja sern los objetos contenidos en el Array value.
JTree(TreeModel newModel)
Crea un JTree con cada elemento especificado en el Vector como hijos de un nodo raz que no es mostrado. TreeNode es la interfaz que permite generar los nodos del rbol, sin embargo por su naturaleza no podemos crear objetos de ella. Existen algunas clases que implementan esta interfaz y de las cuales podemos hacer uso. DefaultMutableTreeNode Esta clase permite crear objetos TreeNode para aadirlos a un JTree; como es necesario tener un Nodo principal crearemos primeramente ste y luego aadiremos sus nodos hoja utilizando el constructor que recibe como parmetro el nombre del nodo:
DefaultMutableTreeNode nodoPrincipal=new DefaultMutableTreeNode( "Nodo Principal"); DefaultMutableTreeNode nodo1=new DefaultMutableTreeNode("Nodo 1"); DefaultMutableTreeNode nodoSub1=new DefaultMutableTreeNode("Nodo hijo 1"); nodo1.add(nodoSub1); nodoPrincipal.add(nodo1);
Programacion 2
Jhomara Luzuriaga
Ahora crearemos el rbol con el nodo principal, utilizando el cuarto constructor de los antes mencionados:
JTree arbol=new JTree(nodoPrincipal);
EJERCICIO
Para el ejercicio utilizaremos el Proyecto ComponentesAvanzados de modo que podamos reutilizar la clase VentanaPrincipal para crear el frame que contendr un rbol con la clasificacin de los animales.
Programacion 2
Jhomara Luzuriaga
4. EVENTOS
4.1. Qu es un evento? Todos los sistemas operativos estn constantemente atendiendo a los eventos generados por los usuarios. Estos eventos pueden ser: pulsar una tecla, mover el ratn, hacer clic con el ratn, pulsar el ratn sobre un botn o men (Java distingue entre simplemente pulsar el ratn en un sitio cualquiera o hacerlo, por ejemplo, en un botn). El sistema operativo notifica a las aplicaciones que estn ocurriendo estos eventos, y ellas deciden si han de responder o no de algn modo a este evento. 4.2. Gestin de Eventos
Para hacer que el manejador escuche los eventos de otro objeto se emplea el mtodo add[nombre_evento]Listener.
Programacion 2
Jhomara Luzuriaga
Ejemplo: frame.addMouseListener(manejador); Este mtodo permite registrar eventos del ratn asociados a un objeto frame. Esto se denomina Registro de Receptores especficos para los eventos. El objeto fuente utiliza esta lista para notificar a cada receptor que ha sucedido un evento de los que controla. Hay algunas clases de eventos que involucran a ms de un evento, tal es el caso del ratn. Por tanto, la clase que implementa el manejador de eventos del ratn debe sobreescribir todos los mtodos declarados en la interfaz MouseListener, tales como mousePressed, mouseReleased, mouseClicked, mouseMoved y otros. Para facilitar el manejo de estos eventos, se han definido un nmero de clases intermedias, conocidas como clases adaptadores (Adapters), para no tener que sobreescribir todos los mtodos de la interfaz cuando se requiere controlar un solo tipo de evento. De esta manera podemos definir dos caminos para acceder a los Oyentes de los eventos para un componente especfico: Implementando la interfaz, lo cual implica sobreescribir todos sus mtodos.
public class EventoMouse implements MouseListener{...
Extendiendo una clase adaptadora, con lo cual se sobreescriben solo los mtodos deseados.
public class EventoMouse extends MouseAdapter{...
Los eventos estn agrupados de acuerdo a su naturaleza en los siguientes grupos: ActionListener: acciones sobre componentes. WindowListener: cierre o manipulacin una ventana (Frame/Dialog). MouseListener: presin de un botn del mouse mientras el cursor est sobre el componente. MouseMotionListener: movimiento del mouse sobre un componente. ComponentListener: visibilidad del componente. FocusListener: obtencin del foco del teclado.
Programacion 2
Jhomara Luzuriaga
A continuacin en la siguiente se lista las principales interfaces junto a sus respectivas clases Adapter y los mtodos que poseen para los componentes:
Listener interface y Adapter ActionListener AdjustmentListener ComponentListener ComponentAdapter Metodos actionPerformed(ActionEvent) adjustmentValueChanged(AdjustmentEvent) componentHidden(ComponentEvent) componentShown(ComponentEvent) componentMoved(ComponentEvent) componentResized(ComponentEvent) componentAdded(ContainerEvent) componentRemoved(ContainerEvent) focusGained(FocusEvent) focusLost(FocusEvent) keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent) mouseClicked(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent) mouseDragged(MouseEvent) mouseMoved(MouseEvent) windowOpened(WindowEvent) windowClosing(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent) itemStateChanged(ItemEvent) valueChanged(ListSelectionEvent)
ItemListener ListSelectionListener
Ejemplo 1. Vamos a trabajar con un evento que permite finalizar la ejecucin del programa al momento de cerrar la VentanaBase, ya que de otro modo seguir ejecutndose.
Programacion 2
Jhomara Luzuriaga
public class VentanaBase extends JFrame { public VentanaBase() { setTitle("Evento WindowClosing"); setSize(new Dimension(300, 200)); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { JOptionPane.showMessageDialog(null,"El finalizara cuando pulse Aceptar"); System.exit(0); } }); } public static void main(String[] args) { new VentanaBase().setVisible(true); }
programa
} En el ejemplo aadimos un escuchador WindowListener al frame e implementamos el mtodo windowClosing. 2. Aadimos a la VentanaBase un botn salir para cerrar la Ventana mostrando un cuadro de confirmacin.
salir.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { int opc=JOptionPane.showConfirmDialog(null,"Esta cerrar la Ventana"); if(opc==0){ System.exit(0); } } });
seguro
de
Programacion 2
Jhomara Luzuriaga
Ejemplo ItemListener ItemListener es un manejador que escucha todos los eventos relacionados con la seleccin o cambio de algn tem en un componente que implica seleccin. Vamos a crear una clase JFrame como la siguiente:
Para manejar los eventos generados a partir de la seleccin de los ChekBox, construiremos una clase que implemente la interfaz ItemListener de manera que podamos sobreescribir el mtodo itemStateChanged (ItemEvent e) Trabajamos con la clase Font para cambiar el estilo de la Fuente del TextField
private class CheckBoxListener implements ItemListener { private int valBold = Font.PLAIN; private int valItalic = Font.PLAIN; @Override public void itemStateChanged(ItemEvent e) { if (e.getSource() == bold) { if (e.getStateChange() == ItemEvent.SELECTED) { valBold = Font.BOLD; } else { valBold = Font.PLAIN; } } if (e.getSource() == italic) { if (e.getStateChange() == ItemEvent.SELECTED) { valItalic = Font.ITALIC; } else { valItalic = Font.PLAIN; } } ... ... } }
Programacion 2
Jhomara Luzuriaga
Es el mismo objeto listener que aadimos a todos los CheckBox ya que es un solo objeto el que va a recibir los eventos y va a realizar los cambios seleccionados. Ejemplo: MouseMotionListener
public class Ventana extends JFrame{ public Ventana(){ setTitle("Evento Mouse"); setSize(new Dimension(250, 150)); setLocationRelativeTo(null); final JPanel panel1=new JPanel(); panel1.setBackground(Color.gray); final JButton boton =new JButton("Boton"); boton.addMouseMotionListener(new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ boton.setCursor(new Cursor(Cursor.MOVE_CURSOR)); } }); panel1.add(boton); panel1.addMouseMotionListener(new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ panel1.setCursor(new Cursor(Cursor.HAND_CURSOR)); } }); this.add(panel1); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); setVisible(true); } }
Programacion 2
Jhomara Luzuriaga
5. GRFICOS EN SWING
Todos los contenedores en swing permiten ser redibujados (repaint) en tiempo de ejecucin, es decir aadir algn componente modificar posiciones, pintar sobre el contenedor, etc. Esto se debe a que un contenedor swing deriva de java.awt.Container, y de esta manera a sus mtodos. Uno de ellos es el mtodo
paint(Graphics g)
dibuja un grfico (Graphics) en el contenedor. La clase Graphics permite disear algunas formas como: Lineas
drawLine(int x1, int y1, int x2, int y2)
Dibuja una lnea usando el color actual entre los puntos (x1, y1) y (x2, y2) en el sistema de coordenadas del grafico Circulos
drawOval(int x, int y, int width, int height)
Rectngulo drawRect(int x,
int y,
int width,
int height)
Dibuja el texto del String srt usando el contexto actual del grfico y el actual color de fuente.
Para dibujar formas con relleno usa los mtodos: fill3DRect(int x, int y, int width, int height, boolean raised) fillArc(int x, int y, int width, int height, int startAngle,
int arcAngle)
Programacion 2
Jhomara Luzuriaga
fillPolygon(int[] xPoints, int[] yPoints, int nPoints) fillRect(int x, int y, int width, int height) fillRoundRect(int x, int arcHeight) int y, int width, int height, int arcWidth,
Ejemplo:
g.fillOval(10,5, 4, 4);
dibujar un valo relleno en un cuadrado de 4x4 en la posicin (10,5) del contedor donde se dibuja. EJEMPLO JFrame Pintor:
public class Pintor extends JFrame { private int cuentaPuntos = 0; private JLabel j=new JLabel("Van: "+cuentaPuntos+" puntos"); // arreglo de 2000 referencias a java.awt.Point private Point puntos[] = new Point[ 2000 ]; // configurar GUI y registrar manejador de eventos de ratn public Pintor() { super( "Un programa simple de dibujo" ); //crear una etiqueta y colocarla en la parte SOUTH del BorderLayout getContentPane().add( new JLabel( "Arrastre el ratn para dibujar" ), BorderLayout.SOUTH ); getContentPane().add( j,BorderLayout.NORTH ); addMouseMotionListener( new MouseMotionAdapter() { // clase interna annima // almacenar coordenadas de arrastre y llamar a repaint public void mouseDragged( MouseEvent evento ) { if ( cuentaPuntos < puntos.length ) { puntos[ cuentaPuntos ] = evento.getPoint(); ++cuentaPuntos; repaint();
Programacion 2
Jhomara Luzuriaga
j.setText("Van: "+cuentaPuntos+" puntos, le quedan:" +(2000-cuentaPuntos)+"puntos"); } } } // fin de la clase interna annima ); // fin de la llamada a addMouseMotionListener setSize( 400, 200 ); setVisible( true ); } // fin del constructor de Pintor // dibujar valo en un cuadro delimitador de 4x4 en ubicacin especifica public void paint( Graphics g ){ super.paint( g ); // borra el rea de dibujo for ( int i = 0; i < puntos.length && puntos[ i ] != null; i++ ) g.fillOval( puntos[ i ].x, puntos[ i ].y, 4, 4 ); } public static void main( String args[] ) { Pintor aplicacion = new Pintor(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } }
Programacion 2
Jhomara Luzuriaga
Al agregar un contenedor de JFrame a un proyecto el programa abre el formulario en una ficha del Editor con una barra de herramientas que incluye varios botones. El formulario se abre en la vista Diseo del generador de interfaces grficas de usuario y aparecen automticamente tres ventanas adicionales en las esquinas del programa, que permiten navegar, organizar y editar los formularios de la interfaz grfica de usuario a medida que los genera. Las diferentes ventanas del generador de interfaces grficas de usuario incluyen:
Programacion 2
Jhomara Luzuriaga
rea de diseo: Ventana principal del generador de interfaces grficas de usuario para crear y editar formularios de interfaz grfica de usuario de Java. Los botones Origen y Diseo de la barra de herramientas permiten ver el cdigo fuente de una clase o la vista grfica de sus componentes de la interfaz grfica de usuario. Los botones adicionales de la barra de herramientas permiten acceder cmodamente a los comandos habituales, por ejemplo para elegir entre los modos de seleccin o conexin, alinear componentes, definir el comportamiento de cambio automtico del tamao de los componentes o pre visualizar los formularios.
Inspector: Proporciona una representacin, tanto visual como no visual, de todos los componentes de la aplicacin en forma de jerarqua de rbol. El inspector tambin permite visualizar el componente del rbol que se est editando en el generador de interfaces grficas de usuario, as como organizar los componentes en los paneles disponibles.
Jhomara Luzuriaga
Programacion 2
Paleta: Lista personalizable de los componentes disponibles que contiene fichas para los componentes de JavaBeans, JFC/Swing y AWT, as como administradores de diseo. Ventana de propiedades: Muestra las propiedades del componente seleccionado en el generador de interfaces grficas de usuario y las ventanas Inspector, Proyectos o Archivos.
Mtodo initComponents() El cdigo del mtodo initComponents() es generado al momento que se aaden componentes al frame, es decir las propiedades y eventos que se agreguen a los componentes, de manera que no se pueden editar desde aqu.
La nica manera de modificar o aumentar cdigo a ste mtodo es mediante la pestaa Code del panel Properties en la vista diseo:
Crear el componente Antes de crear el componente Despus de crear el componente Para inicializar el valor del componente Despus de inicializar el componente ..........
Programacion 2
Jhomara Luzuriaga
PRCTICA 1. Crear un proyecto denominado ProyectoSwing. 2. Crear una clase PrimerFrame en un paquete denominado presentacion. 3. Agregar los siguientes componentes y modificar sus propiedades de diseo:
Modificar el layout del panel Operaciones a BoxLayout El cuadro de texto de Resultado no debe ser editable. Agregamos los eventos a cada botn de las operaciones:
Programacion 2
Jhomara Luzuriaga
Una vez seleccionado el evento estaremos en la vista Source en donde est todo el cdigo generado al agregar y modificar los componentes.
Codificar los eventos de cada botn y controlar las excepciones para el ingreso de texto en los campos de nmero.
EJERCICIO: Leer un archivo de texto desde un programa en java que permita leer y modificar el contenido en un JTextArea. Utilice el patrn Modelo Vista Controlador para manejar los archivos
Programacion 2
Jhomara Luzuriaga
Uso de JFileChooser para buscar y abrir el archivo. Uso de JFileColor para cambiar el color de fondo del rea de texto y el color de fuente. Uso del paquete java.io para la lectura y escritura del Archivo.
EJERCICIO: Elabore un programa que permita administrar en una tabla (JTable) los datos de los estudiantes. Utilizar el patrn MVC, de manera que la tabla pueda almacenar los estudiantes como objetos. Trabajar los eventos que permiten actualizar los datos de la tabla al agregar, modificar o eliminar Utilizar la opcin binding de Netbeans para obtener los datos del Estudiante.
Jhomara Luzuriaga
Programacion 2
BIBLIOGRAFA 1. PREZ Gustavo Guillermo, Aprendiendo Java y Programacin Orientada a Objetos. http://compunauta.com/forums/linux/programacion/java/ebook.html 2. DEITEL Paul. Como programar en Java 7/e. Pearson Education. 2007. 3. Micael Gallego & Soto Montalvo, Interfaces Grficas en Java. Ramn Areces, 2005. http://gavab.escet.urjc.es/wiki/download/mp/material/ModuloEv-Tema2-1.pdf 4. PAVN GMEZ Santiago Dpto. Ingeniera Sistemas Telemticos Univ. Politcnica de Madrid http://jungla.dit.upm.es/~santiago/docencia/apuntes/Swing/ 5. El tutorial Java de Sun: http://java.sun.com/docs/books/tutorial 6. Tutorial Java Bsico Versin 3.0 http://www.javahispano.org 7. API Java de Sun (version 6): http://java.sun.com/javase/6/docs/api
Programacion 2
Jhomara Luzuriaga