Professional Documents
Culture Documents
Una interfaz grfica de usuario (GUI) presenta un mecanismo amigable al usuario para interactuar con una aplicacin. Las GUIs se crean a partir de componentes de la GUI, a estos se les conoce tambin como controles o widgets (accesorios de ventana) en otros lenguajes. Un componente de la GUI es un objeto con el cual interacta el usuario mediante el ratn, el teclado u otra forma de entrada como el reconocimiento de voz. Clase JOptionPane de Java (paquete javax.swing). Proporciona cuadros de dilogo preempaquetados para entrada y salida. Estos dilogos se muestran mediante la invocacin de los mtodos static de JOptionPane. Ejm.
// Suma.java // Programa de suma que utiliza a JOptionPane para entrada y salida. import javax.swing.JOptionPane; // el programa usa JOptionPane public class Suma { public static void main( String args[] ) { // obtiene la entrada del usuario de los dilogos de entrada de JOptionPane String primerNumero = JOptionPane.showInputDialog( "Introduzca el primer entero" ); String segundoNumero = JOptionPane.showInputDialog( "Introduzca el segundo entero" ); // convierte las entradas String en valores int para usarlos en un clculo int numero1 = Integer.parseInt( primerNumero ); int numero2 = Integer.parseInt( segundoNumero ); int suma = numero1 + numero2; // suma nmeros // muestra los resultados en un dilogo de mensajes de JOptionPane JOptionPane.showMessageDialog( null, "La suma es " + suma, "Suma de dos enteros", JOptionPane.PLAIN_MESSAGE ); } // fin del mtodo main } // fin de la clase Suma
Componentes bsicos de GUI JLabel JTextField Muestra texto que no puede editarse, o iconos Permite al usuario introducir datos mediante el teclado. Tambin se puede utilizar para mostrar texto que puede o no editarse JButton Activa un evento cuando se oprime mediante el ratn JCheckBox Especifica una opcin que puede seleccionarse o no JComboBox Proporciona una lista desplegable de elementos, a partir de los cuales el usuario puede realizar una seleccin, haciendo clic en un elemento o posiblemente escribiendo e el cuadro. JList Proporciona una lista de elementos a partir de los cuales el usuario puede realizar una seleccin, haciendo clic en cualquier elemento en la lista. Pueden seleccionarse varios elementos. JPanel Proporciona un rea en la que pueden colocarse y organizarse los componentes. Tambin puede utilizarse como un rea de dibujo para grficos
Superclases de los componentes de GUI. El siguiente diagrama de clases UML, muestra una jerarqua de herencia que contiene clases a partir de las cuales los componentes Swing
La clase Component (java.awt) es una subclase de Object que declara muchos de los atributos y comportamientos comunes para los componentes de GUI en los paquetes java.awt y java.swing. La mayora de los componentes GUI extienden la clase Component de manera directa o indirecta. La clase Container (paquete java.awt) es una subclase Component. Los objetos Component se adjuntan a objetos Container (como las ventanas), de manera que los objetos component se pueden organizar y mostrar en la pantalla. Cualquier objeto que sea un Container se puede utilizar para organizar o otros objetos Container para ayudar a organizar una GUI. La clase JComponent (javax.swing) es una subclase de Container. JComponent es la superclase de todos los componentes ligeros de Swing, y declara los atributos y comportamientos comunes. Debido a que jComponent es una subclase de Container, todos los componentes ligeros de Swing son tambin objetos Container.
// El constructor de LabelFrame agrega objetos JLabel a JFrame public LabelFrame() { super( "Prueba de JLabel" ); setLayout( new FlowLayout() ); // establece el esquema del marco // Constructor de JLabel con un argumento String etiqueta1 = new JLabel( "Etiqueta con texto" ); etiqueta1.setToolTipText( "Esta es etiqueta1" ); add( etiqueta1 ); // agrega etiqueta1 a JFrame // Constructor de JLabel con argumentos de cadena, Icono y alineacin Icon insecto = new ImageIcon( getClass().getResource( "insecto1.gif" ) ); etiqueta2 = new JLabel( "Etiqueta con texto e icono", insecto, SwingConstants.LEFT ); etiqueta2.setToolTipText( "Esta es etiqueta2" ); add( etiqueta2 ); // agrega etiqueta2 a JFrame etiqueta3 = new JLabel(); // Constructor de JLabel sin argumentos etiqueta3.setText( "Etiqueta con icono y texto en la parte inferior" ); etiqueta3.setIcon( insecto ); // agrega icono a JLabel etiqueta3.setHorizontalTextPosition( SwingConstants.CENTER ); etiqueta3.setVerticalTextPosition( SwingConstants.BOTTOM ); etiqueta3.setToolTipText( "Esta es etiqueta3" ); add( etiqueta3 ); // agrega etiqueta3 a JFrame } // fin del constructor de LabelFrame } // fin de la clase LabelFrame
Prueba de LabelFrame
// PruebaLabel.java // Prueba de LabelFrame. import javax.swing.JFrame; public class PruebaLabel { public static void main( String args[] ) { LabelFrame marcoEtiqueta = new LabelFrame(); // crea objeto LabelFrame marcoEtiqueta.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); marcoEtiqueta.setSize( 275, 180 ); // establece el tamao del marco marcoEtiqueta.setVisible( true ); // muestra el marco } // fin de main } // fin de la clase PruebaLabel
Coloca el texto en la parte superior Coloca el texto en el centro Coloca el texto en la parte inferior
de de de //
con tamao fijo construido con texto con texto y tamao de contrasea con
// El constructor de CampoTextoMarco agrega objetos JTextField a JFrame public CampoTextoMarco() { super( "Prueba de JTextField y JPasswordField" ); setLayout( new FlowLayout() ); // establece el esquema del marco // construye campo de texto con 10 columnas campoTexto1 = new JTextField( 10 ); add( campoTexto1 ); // agrega campoTexto1 a JFrame // construye campo de texto con texto predeterminado campoTexto2 = new JTextField( "Escriba el texto aqui" ); add( campoTexto2 ); // agrega campoTexto2 a JFrame // construye campo de texto con texto predeterminado y 21 columnas campoTexto3 = new JTextField( "Campo de texto no editable", 21 ); campoTexto3.setEditable( false ); // deshabilita la edicin add( campoTexto3 ); // agrega campoTexto3 a JFrame // construye campo de contrasea con texto predeterminado campoContrasenia = new JPasswordField( "Texto oculto" ); add( campoContrasenia ); // agrega campoContrasenia a JFrame // registra los manejadores de eventos ManejadorCampoTexto manejador = new ManejadorCampoTexto(); campoTexto1.addActionListener( manejador ); campoTexto2.addActionListener( manejador ); campoTexto3.addActionListener( manejador ); campoContrasenia.addActionListener( manejador ); } // fin del constructor de CampoTextoMarco // clase interna privada para el manejo de eventos private class ManejadorCampoTexto implements ActionListener { // procesa los eventos de campo de texto public void actionPerformed( ActionEvent evento )
{ String cadena = ""; // declara la cadena a mostrar // el usuario oprimi Intro en el objeto JTextField campoTexto1 if ( evento.getSource() == campoTexto1 ) cadena = String.format( "campoTexto1: %s", evento.getActionCommand() ); // el usuario oprimi Intro en el objeto JTextField campoTexto2 else if ( evento.getSource() == campoTexto2 ) cadena = String.format( "campoTexto2: %s", evento.getActionCommand() ); // el usuario oprimi Intro en el objeto JTextField campoTexto3 else if ( evento.getSource() == campoTexto3 ) cadena = String.format( "campoTexto3: %s", evento.getActionCommand() ); // el usuario oprimi Intro en el objeto JTextField campoContrasenia else if ( evento.getSource() == campoContrasenia ) cadena = String.format( "campoContrasenia: %s", new String( campoContrasenia.getPassword() ) ); // muestra el contenido del objeto JTextField JOptionPane.showMessageDialog( null, cadena ); } // fin del mtodo actionPerformed } // fin de la clase interna privada ManejadorCampoTexto } // fin de la clase CampoTextoMarco
Prueba de CampoTextoMarco
// PruebaCampoTexto.java // Prueba de CampoTextoMarco. import javax.swing.JFrame; public class PruebaCampoTexto { public static void main( String args[] ) { CampoTextoMarco campoTextoMarco = new CampoTextoMarco(); campoTextoMarco.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); campoTextoMarco.setSize( 350, 100 ); // establece el tamao del marco campoTextoMarco.setVisible( true ); // muestra el marco } // fin de main } // fin de la clase PruebaCampoTexto
Invocacin del manejador de eventos. Cada tipo de evento tiene uno o ms interfaces de escucha de eventos de interfaces de escucha de eventos correspondientes. Por ejemplo, los eventos tipo ActionEvent son manejados por objetos MouseListener y MouseMotionListener, y los eventos tipo KeyEvent son manejados por objetos MouseListener y MouseMotionListener, y los eventos KeyEvent son manejados por objetos KeyListener.
campoTexto 1
Objeto ManejadorManejadorCampoTexto
manejador1
Objeto TextFieldHandler
listenerList1
// MarcoBoton agrega objetos JButton a JFrame public MarcoBoton() { super( "Prueba de botones" ); setLayout( new FlowLayout() ); // establece el esquema del marco botonJButtonSimple = new JButton( "Boton simple" ); // botn con texto add( botonJButtonSimple ); // agrega botonJButtonSimple a JFrame Icon insecto1 = new ImageIcon( getClass().getResource( "insecto1.gif" ) ); Icon insecto2 = new ImageIcon( getClass().getResource( "insecto2.gif" ) ); botonJButtonElegante = new JButton( "Boton elegante", insecto1 ); // establece la imagen botonJButtonElegante.setRolloverIcon( insecto2 ); // establece la imagen de sustitucin add( botonJButtonElegante ); // agrega botonJButtonElegante a JFrame // crea nuevo ManejadorBoton para manejar los eventos de botn ManejadorBoton manejador = new ManejadorBoton(); botonJButtonElegante.addActionListener( manejador ); botonJButtonSimple.addActionListener( manejador ); } // fin del constructor de MarcoBoton // clase interna para manejar eventos de botn private class ManejadorBoton implements ActionListener { // maneja evento de botn public void actionPerformed( ActionEvent evento ) { JOptionPane.showMessageDialog( MarcoBoton.this, String.format( "Usted oprimio: %s", evento.getActionCommand() ) ); } // fin del mtodo actionPerformed } // fin de la clase interna privada ManejadorBoton } // fin de la clase MarcoBoton
Botones que mantienen el estado // MarcoCasillaVerificacion.java // Creacin de botones JCheckBox. import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ItemListener; import java.awt.event.ItemEvent; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JCheckBox; public class MarcoCasillaVerificacion extends JFrame { private JTextField campoTexto; // muestra el texto en tipos de letra cambiantes private JCheckBox negritaJCheckBox; // para seleccionar/deseleccionar negrita private JCheckBox cursivaJCheckBox; // para seleccionar/deseleccionar cursiva // El constructor de MarcoCasillaVerificacion agrega objetos JCheckBox a JFrame public MarcoCasillaVerificacion() { super( "Prueba de JCheckBox" ); setLayout( new FlowLayout() ); // establece el esquema del marco // establece JTextField y su tipo de letra campoTexto = new JTextField( "Observe como cambia el estilo de tipo de letra", 28 ); campoTexto.setFont( new Font( "Serif", Font.PLAIN, 14 ) ); add( campoTexto ); // agrega campoTexto a JFrame negritaJCheckBox = new JCheckBox( "Negrita" ); // crea casilla de verificacin "negrita" cursivaJCheckBox = new JCheckBox( "Cursiva" ); // crea casilla de verificacin "cursiva" add( negritaJCheckBox ); // agrega casilla de verificacin "negrita" a JFrame add( cursivaJCheckBox ); // agrega casilla de verificacin "cursiva" a JFrame // registra componentes de escucha para objetos JCheckBox ManejadorCheckBox manejador = new ManejadorCheckBox(); negritaJCheckBox.addItemListener( manejador ); cursivaJCheckBox.addItemListener( manejador ); } // fin del constructor de MarcoCasillaVerificacion // clase interna privada para el manejo de private class ManejadorCheckBox implements { private int valNegrita = Font.PLAIN; // de letra negrita private int valCursiva = Font.PLAIN; // de letra cursiva eventos ItemListener ItemListener controla el estilo de tipo controla el estilo de tipo
// responde a los eventos de casilla de verificacin public void itemStateChanged( ItemEvent evento ) { // procesa los eventos de la casilla de verificacin "negrita" if ( evento.getSource() == negritaJCheckBox ) valNegrita = negritaJCheckBox.isSelected() ? Font.BOLD : Font.PLAIN; // procesa los eventos de la casilla de verificacin "cursiva" if ( evento.getSource() == cursivaJCheckBox ) valCursiva = cursivaJCheckBox.isSelected() ? Font.ITALIC : Font.PLAIN; // establece el tipo de letra del campo de texto campoTexto.setFont( new Font( "Serif", valNegrita + valCursiva, 14 ) ); } // fin del mtodo itemStateChanged } // fin de la clase interna privada ManejadorCheckBox } // fin de la clase MarcoCasillaVerificacion
Prueba de MarcoCasillaVerificacin
// PruebaCasillaVerificacion.java // Prueba de MarcoCasillaVerificacion. import javax.swing.JFrame; public class PruebaCasillaVerificacion { public static void main( String args[] ) { MarcoCasillaVerificacion marcoCasillaVerificacion = new MarcoCasillaVerificacion(); marcoCasillaVerificacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); marcoCasillaVerificacion.setSize( 350, 100 ); // establece el tamao del marco marcoCasillaVerificacion.setVisible( true ); // muestra el marco } // fin de main } // fin de la clase PruebaCasillaVerificacion