Está en la página 1de 19

Grficos De Java 2.

0
Revisado en el Ciclo II/2007

INDICE
Introduccin Swing Swing o awt? Componentes swing Manejo de eventos Estructura de una aplicacin

Introduccin
La meta original de diseo de la biblioteca de interfaz grfico de usuario en Java 1.0 era permitir al programador construir un IGU que tuviera buen aspecto en todas las plataformas. Esta meta no se logr. En su lugar, el AWT de Java 1.0 produce un IGU que tiene una apariencia igualmente mediocre en todos los sistemas. Adems, es restrictivo: solo se pueden usar cuatro fuentes y no se puede acceder a ninguno de los elementos del IGU ms sofisticados que existen en el sistema operativo.

Intro. (Cont.)
Adems, el AWT de Java 1.0 no es orientado a objetos. El por qu de esto? El AWT original haba sido conceptualizado, diseado e implementado en un mes. La situacin mejor con el modelo de eventos del AWT de Java 1.1 que toma un enfoque orientado a objetos mucho ms claro, junto con la adicin de JavaBeans, un modelo de programacin basado en componentes orientado hacia la creacin sencilla de entornos de programacin visuales.

Intro. (Cont.)
Java 2 acaba esta transformacin alejndose del AWT de Java 1.0 esencialmente, reemplazando todo con las Java Foundation Classes (JFC), cuya parte IGU se denomina Swing. Se trata de un conjunto de JavaBeans fciles de usar, y fciles de entender que pueden ser arrastrados y depositados (adems de programados a mano) para crear un IGU con el que uno se encuentre finalmente satisfecho.

swing o awt? 1
La gran diferencia entre los componentes swing y los componentes awt es que los primeros estn implementados absolutamente con cdigo no nativo lo que los hace independientes de la plataforma. Adems proporcionan ms capacidades que los componentes awt.
1. Informacin tomada de: Fco. Javier Ceballos. Java 2 Curso de Programacin. 2a. Edicin.

Los componentes swing se pueden identificar porque su nombre empieza por J; por ejemplo, el componente de awt Button tiene su correspondiente componente swing JButton. Los componentes awt se localizan en el paquete java.awt y los componentes swing en el paquete javax.swing

Se debe evitar usar los componentes de AWT como Menu, ScrollPane y todos los componentes que heredan de las clases Canvas y Panel de AWT junto con los componentes Swing, porque estos se dibujarn sobre los componentes Swing.

Componentes swing
Hay componentes swing para cada uno de los elementos que usted ya ha visto, mas de una vez, en una ventana de su sistema Windows, Linux u otro. Los ms comunes: Etiquetas: Se implementa a partir de la clase JLabel. Botones: Se implementa a partir de la clase JButton Cajas de Texto: Se implementan a partir de la clase JTextField las de una sola lnea de texto, y a partir de JTextArea las de varias lneas. Casillas de verificacin: Se implementan a partir de la clase JCheckBox

Componentes swing
Botones de opcin: Se implementan a partir de la clase JRadioButton Listas. Se implementan a partir de la clase JComboBox Barras de desplazamiento: Se implementan a partir de la clase JScrollBar Cuadros de dilogo estandar: Se implementan a partir de la clase JOptionPane.

Manejo de eventos
Cuando el usuario hace clic sobre un botn de pulsacin espera que ocurra algo. Ese algo hay que programarlo y para poder hacerlo hay que saber como manejar ese evento. Los eventos se manejan a travs de un conjunto de mtodos predeterminados en todos los componentes, pero para que un componente pueda responder a los eventos que sobre l pueden ocurrir, tiene que tener asociado el manejador o escuchador de esos eventos.

Estructura de una aplicacin


Una aplicacin que muestra una interfaz grfica cuando se ejecuta no es ms que un objeto de una clase derivada de JFrame. El cdigo mostrado a continuacin puede ser una estructura vlida para la mayora de las aplicaciones que inician su ejecucin visualizando una ventana principal.

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class AplicacionSwing extends JFrame { // referencias a los componentes // otras referencias private AplicacionSwing( String titulo ) { super(titulo); iniciarComponentes(); //ajustar el tamao de la ventana al minimo pack(); }

private void iniciarComponentes() { //permitir que la ventana de la aplicacin //responda a los eventos de ventana addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent evento) { cerrarVentana(); } }); }

private void cerrarVentana() { //salir de la aplicacin System.exit(0); } public static void main(String [] args) { AplicacinSwing vPpal = new AplicacionSwing(Aplicacin Swing); vPpal.show(); } } //de la aplicacin

En la programacin de aplicaciones Java, los IDE facilitan mucho al colocar una paleta de opciones para dibujar los componentes y su distribucin. El cdigo generado por el IDE cumple normalmente las reglas que se han visto para la creacin de eventos, listeners y clases. Crearemos una interfaz usando Netbeans.

Como se ve en la imagen anterior, despus de crear un proyecto nuevo, adicione un Formulario Jframe al paquete principal usando el men de contexto, llame a la clase JFrameAlumno

El resultado es un rea de trabajo, una paleta de componentes, y un cuadro de propiedades. As:


Paleta

Area de trabajo

Propie dades

Ahora se puede iniciar colocando los componentes para dibujar su formulario, arrastrando un componente de la paleta sobre el rea de trabajo; luego de esto se puede adicionar las acciones para los eventos respectivos.

Al hacer clic derecho sobre el rea de trabajo, se puede seleccionar el Layout o disposicin que utilizar este contenedor.

Como se puede ver en la figura anterior, Netbeans posee un Layout propio que permite colocar los componentes en una posicin absoluta y adems posee los Layout estndar.

Note que al seleccionar un componente, sus propiedades se muestran y se pueden definir los valores que se quiere que tengan.

Con clic derecho sobre el componente, tambin se puede acceder a los mtodos que implementan el respectivo Listener del evento seleccionado.

Netbeans entonces pasa a la ventana origen y muestra el cdigo generado por esa accin, el cual es el cascarn del mtodo que se encargar de manejar el evento del jToggleButton.

El mtodo initComponents() es generado por Netbeans y no puede ser modificado, porque lo maneja automaticamente el IDE desde el editor Visual. Lo que s podemos modificar es el mtodo jToggleButtonActionPerformed que es donde se coloca la respuesta al evento generado.

El JFrame posee un mtodo main y crea una instancia de la clase para ejecutarse. El frame toma un valor y trae en mtodo setVisible, que hace posible observarlo cuando se corre el programa.

Cdigo equivalente generado por Netbeans para el primer ejemplo


/* * AplicacionSwing.java * * Created on 9 de noviembre de 2007, 03:33 PM */ package aplicacionswing; public class AplicacionSwing extends javax.swing.JFrame { /** Creates new form AplicacionSwing */ public AplicacionSwing() { initComponents(); }

/** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc=" Cdigo Generado "> private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CL OSE); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { formWindowClosing(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout);

layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment. LEADING) .addGap(0, 400, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment. LEADING) .addGap(0, 300, Short.MAX_VALUE) ); pack();

}// </editor-fold> private void formWindowClosing(java.awt.event.WindowEvent evt) { // TODO: Agrege su codigo aqui: cerrarVentana(); } private void cerrarVentana()
{

System.exit(0); }

/** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new AplicacionSwing().setVisible(true); } }); } // Declaracin de varibales -no modificar // Fin de declaracin de variables }

Ejemplo mostrando el uso de JPopupMenu


// Demonstrating JPopupMenus import java.awt.*; import java.awt.event.*; import javax.swing.*; public class PopupTest extends JFrame { private JRadioButtonMenuItem items[]; private final Color colorValues[] = { Color.BLUE, Color.YELLOW, Color.RED }; private JPopupMenu popupMenu; // set up GUI public PopupTest() { super( "Using JPopupMenus" );

ItemHandler handler = new ItemHandler(); String colors[] = { "Blue", "Yellow", "Red" }; // set up popup menu and its items ButtonGroup colorGroup = new ButtonGroup(); popupMenu = new JPopupMenu(); items = new JRadioButtonMenuItem[ 3 ]; // construct each menu item and add to popup menu; // also enable event handling for each menu item for ( int count = 0; count < items.length; count++ ) { items[ count ] = new JRadioButtonMenuItem( colors[ count ] ); popupMenu.add( items[ count ] ); colorGroup.add( items[ count ] ); items[ count ].addActionListener( handler ); }

getContentPane().setBackground( Color.WHITE ); // declare a MouseListener for the window that //displays a JPopupMenu when the popup trigger //event occurs addMouseListener( new MouseAdapter() { // anonymous inner class // handle mouse press event public void mousePressed( MouseEvent event ) { checkForTriggerEvent( event ); } // handle mouse release event public void mouseReleased( MouseEvent event ) { checkForTriggerEvent( event ); }

// determine whether event should trigger popup menu private void checkForTriggerEvent( MouseEvent event ) { if ( event.isPopupTrigger() ) popupMenu.show( event.getComponent(), event.getX(), event.getY() ); } } // end anonymous inner clas ); // end call to addMouseListener setSize( 300, 200 ); setVisible( true ); } // end constructor PopupTest

public static void main( String args[] ) { PopupTest application = new PopupTest(); application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } // private inner class to handle menu item events private class ItemHandler implements ActionListener { // process menu item selections public void actionPerformed( ActionEvent event ) { // determine which menu item was selected for ( int i = 0; i < items.length; i++ ) if ( event.getSource() == items[ i ] ) { getContentPane().setBackground( colorValues[ i ] ); return; } } } // end private inner class ItemHandler

} // end class PopupTest /**************************************** ********************************** * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and * * Prentice Hall. All Rights Reserved. */

Preguntas?
Qu triste sera el mundo si todo en l estuviera hecho, si no hubiera un rosal que plantar, una empresa que emprender !...

phel

También podría gustarte