componentes gui parte iii

16
Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario  Parte III Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 1 - COMPONENTES DE LA INTERFAZ GRÁFICA DE USUARIO Código   Parte III 1. Manejo de eventos de ventana y botones. 1.1. Crear un nuevo proyecto: ManejoEventos. 1.2.  Agregar una nueva Clase Java: FrmSaludo , en el paquete eventos. 1.3. Escribir el código mostrado a continuación. package eventos; public class FrmSaludo extends javax.swing.JFrame { private javax.swing.JLabel lblSaludo; private javax.swing.JButton btnSaludo;

Upload: jean-paul-perea

Post on 08-Apr-2018

223 views

Category:

Documents


0 download

TRANSCRIPT

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 1/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 1 -

COMPONENTES DE LA INTERFAZ GRÁFICA DE USUARIOCódigo – Parte III

1.

Manejo de eventos de ventana y botones.1.1. Crear un nuevo proyecto: ManejoEventos.

1.2. Agregar una nueva Clase Java: FrmSaludo, en el paquete eventos.

1.3. Escribir el código mostrado a continuación.

package eventos;

public class FrmSaludo extends javax.swing.JFrame {

private javax.swing.JLabel lblSaludo;private javax.swing.JButton btnSaludo;

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 2/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 2 -

public FrmSaludo() {setSize(300,200);setTitle("Saludo");initComponents();

}

private void initComponents() {lblSaludo = new javax.swing.JLabel();btnSaludo = new javax.swing.JButton();

// Establecer el administrador de diseñogetContentPane().setLayout(null);

// Manejador de eventos asociado con el formularioaddWindowListener(new java.awt.event.WindowAdapter() {

public void windowClosing(java.awt.event.WindowEvent evt) {exitForm(evt);

}});lblSaludo.setText("etiqueta");lblSaludo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

lblSaludo.setFont(new java.awt.Font("Dialog", 1, 18));getContentPane().add(lblSaludo);lblSaludo.setBounds(42, 36, 204, 30);

btnSaludo.setToolTipText("Botón de pulsación");btnSaludo.setMnemonic('C');btnSaludo.setText("Haga clic aquí");

// Manejador de eventos asociado con el botónbtnSaludo.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {btnSaludoActionPerformed(evt);

}});

getContentPane().add(btnSaludo);btnSaludo.setBounds(42, 90, 204, 30);setLocationRelativeTo(null);

}

private void exitForm(java.awt.event.WindowEvent evt) {System.exit(0);

}

private void btnSaludoActionPerformed(java.awt.event.ActionEvent evt) {float rojo = (float)Math.random();float verde = (float)Math.random();float azul = (float)Math.random();

lblSaludo.setForeground(new java.awt.Color(rojo, verde, azul));lblSaludo.setText("¡¡¡ Hola mundo !!!");

}

public static void main(String [] args) {try {

javax.swing.UIManager.setLookAndFeel( javax.swing.UIManager.getCrossPlatformLookAndFeelClassName());

} catch(Exception ex) { javax.swing.JOptionPane.showMessageDialog(new FrmSaludo(),

"No se pudo establecer el aspecto deseado", "Aviso", 2);}new FrmSaludo().setVisible(true);

}}

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 3/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 3 -

Al ejecutar la aplicación, se obtendrá un formulario similar al que se muestra a continuación:

El método initComponents invoca al método addWindowListener(WindowListener l)paraañadir a la ventana principal (referencias por this ) un escuchador de eventos (llamados también

manejador de eventos) del tipo WindowListener. De esta forma, la aplicación podrá responder alos eventos de ventana (por ejemplo, cerrar la ventana). Cuando en una ventana ocurre el evento“cerrar la ventana” (clic en el botón ), se invoca automáticamente al método windowClosing,que en el ejemplo, llama al método exitForm que finaliza la aplicación.El argumento de addWindowListener es un objeto de una clase anónima, subclase deWindowAdapter, que redefine al método windowClosing.

Se asigna un administrador de diseño que permite establecer la forma en que los componentes serándistribuidos sobre el contenedor:

Se añaden los componentes y se editan sus propiedades:

Se añaden los componentes al panel raíz del objeto FrmSaludo y se establece su posición en elcontenedor y su tamaño:

El método add del objeto Container devuelto por getContentPane permite añadir uncomponente al contenedor, en este caso FrmSaludo. El método setBounds, heredado de la clasejava.awt.Component, permite establecer las coordenadas de la esquina superior izquierda de uncomponente, su anchura y su altura.

El método btnSaludoActionPerformedcontiene el código que debe ejecutarse para responder alevento clic de este botón. El método setForeground establece el color del primer plano; en estecaso el color del texto. Este método recibe como argumento un objeto de la clase Color queespecifica los componentes rojo, verde y azul del color RGB que representa dicho objeto. Dichoscomponentes son obtenidos de forma aleatoria invocando al método random.

Swing tiene un administrador de interfaz de usuario, UIManager, que controla la apariencia ( lookand feel ) de los componentes que forman una interfaz gráfica, que puede ser de estilo Windows , Motif

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 4/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 4 -

X-Window o Java . Lo normal es establecer el estilo propio del sistema, que es devuelto por el métodogetSystemLookAndFeelClassNamede UIManager, o bien el estilo Java (multiplataforma) quees devuelto por getCrossPlatformLookAndFeelClassName. Para establecer uno de estos estilos,se invoca al método setLookAndFeel:

2. Manejo de eventos de cajas de texto, etiquetas y botones.Se desarrollará una aplicación que permita convertir grados Centígrados a Fahrenheit, y viceversa.

2.1. Agregar una nueva Clase Java: FrmConversor, en el paquete eventos.

2.2. Escribir el código mostrado a continuación.

package eventos;

public class FrmConversor extends javax.swing.JFrame {

private javax.swing.JLabel lblGradosC;private javax.swing.JTextField txtGradosC;private javax.swing.JButton btnAceptar;private javax.swing.JLabel lblGradosF;private javax.swing.JTextField txtGradosF;private Object objTextField;

public FrmConversor() {setSize(300, 200);setTitle("Conversión de temperaturas");initComponents();

}

private void initComponents() {lblGradosC = new javax.swing.JLabel();txtGradosC = new javax.swing.JTextField();lblGradosF = new javax.swing.JLabel();txtGradosF = new javax.swing.JTextField();btnAceptar = new javax.swing.JButton();getContentPane().setLayout(null);addWindowListener(new java.awt.event.WindowAdapter() {

public void windowOpened(java.awt.event.WindowEvent evt) {formWindowOpened(evt);

}public void windowClosing(java.awt.event.WindowEvent evt){

exitForm(evt);}

});lblGradosC.setText("Grados centígrados");getContentPane().add(lblGradosC);lblGradosC.setBounds(12, 28, 116, 16);txtGradosC.setText("0.00");txtGradosC.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);

// Manejador de eventos asociado a la caja de textotxtGradosC.addFocusListener(new java.awt.event.FocusAdapter() {

public void focusGained(java.awt.event.FocusEvent evt) {txtGradosFocusGained(evt);

}});txtGradosC.addKeyListener(new java.awt.event.KeyAdapter() {

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 5/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 5 -

public void keyTyped(java.awt.event.KeyEvent evt) {txtGradosKeyTyped(evt);

}});getContentPane().add(txtGradosC);txtGradosC.setBounds(132, 28, 144, 20);

lblGradosF.setText("Grados farenheit");getContentPane().add(lblGradosF);lblGradosF.setBounds(12, 68, 104, 24);txtGradosF.setText("32.00");txtGradosF.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);

// Manejador de eventos asociado a la caja de textotxtGradosF.addFocusListener(new java.awt.event.FocusAdapter() {

public void focusGained(java.awt.event.FocusEvent evt) {txtGradosFocusGained(evt);

}});txtGradosF.addKeyListener(new java.awt.event.KeyAdapter() {

public void keyTyped(java.awt.event.KeyEvent evt) {

txtGradosKeyTyped(evt);}});getContentPane().add(txtGradosF);txtGradosF.setBounds(132, 72, 144, 20);btnAceptar.setText("Aceptar");btnAceptar.setMnemonic('A');

// Manejador de eventos asociado con el botónbtnAceptar.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {btnAceptarActionPerformed(evt);

}});

// Botón por omisióngetRootPane().setDefaultButton(btnAceptar);getContentPane().add(btnAceptar);btnAceptar.setBounds(132, 120, 144, 24);setLocationRelativeTo(null);

}

private void formWindowOpened(java.awt.event.WindowEvent evt) {txtGradosC.requestFocus();

}

private void exitForm(java.awt.event.WindowEvent evt) {System.exit(0);

}

private void txtGradosFocusGained(java.awt.event.FocusEvent evt) { javax.swing.JTextField objEnfocado = (javax.swing.JTextField)evt.getSource(); // Seleccionar el texto de una caja de textoobjEnfocado.selectAll();

}

private void txtGradosKeyTyped(java.awt.event.KeyEvent evt) {objTextField = evt.getSource();

}

private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) {

try {double grados;

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 6/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 6 -

// Si se escribió en la caja de texto grados centigrados:if (objTextField == txtGradosC) {

grados = Double.parseDouble(txtGradosC.getText()) * 9.0 / 5.0 + 32.0;String texto = String.format("%.2f", grados); // Redondear a 2 decimalestxtGradosF.setText(texto);

}

// Si se escribió en la caja de texto grados farenheitif (objTextField == txtGradosF) {grados = (Double.parseDouble(txtGradosF.getText()) - 32.0) * 5.0 / 9.0;String texto = String.format("%.2f", grados);txtGradosC.setText(texto);

}} catch (NumberFormatException e) {

txtGradosC.setText("0.00");txtGradosF.setText("32.00");

}}

public static void main(String [] args) {

try { javax.swing.UIManager.setLookAndFeel( javax.swing.UIManager.getSystemLookAndFeelClassName());

} catch(Exception ex) { javax.swing.JOptionPane.showMessageDialog(new FrmConversor(),

"No se pudo establecer el aspecto deseado", "Aviso", 2);}new FrmConversor().setVisible(true);

}}

Al ejecutar la aplicación, se obtendrá un formulario similar al que se muestra a continuación:

Un botón por omisión es aquel que tiene un borde más resaltado que los demás y que esautomáticamente pulsado cuando se pulsa la tecla Enter . Para informar al panel raíz del que será elbotón por omisión de entre todo los que contenga, hay que invocar al método setDefaultButton:

Cuando el usuario escribe en una caja de texto, cada pulsación produce un evento de tipo KeyEventque coloca en la cola de mensajes de la aplicación los mensajes keyPressed, keyTyped y keyReleased. Para interceptar este tipo de eventos, se añade a cada una de las cajas de texto unmanejador de tipo KeyListener. El mensaje que se requiere interceptar es “se ha escrito un carácter:keyTyped”. El método txtGradosKeyTyped guarda el identificador de la caja de texto en la

variable miembro objTextField, cuyo valor servirá para saber sobre qué caja de texto escribió elusuario y actualizar a partir de este valor el contenido de la otra.

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 7/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 7 -

Una vez que el usuario haya escrito un valor en una caja de texto, su siguiente acción será pulsar la

tecla Enter , o lo que es lo mismo, hará clic en el botón Aceptar . Para que este botón pueda responderal evento “clic” se le asocia un manejador de eventos de acción, en el método initComponents :

Las acciones que se ejecutarán cuando se haga clic sobre el botón Aceptar , se definen en el métodobtnAceptarActionPerformed . Este método tiene que interrogar la variable miembro objTextField parasaber en qué caja de texto introdujo el usuario un nuevo valor y aplicar la fórmula de conversiónadecuada, visualizando el resultado de la conversión en la otra caja.

Cuando un componente posee el punto de inserción, se dice que dicho componente está enfocado oque tiene el foco. Para enfocar un componente, el usuario puedo hacer clic sobre él o pulsando latecla Tab una o más veces hasta situar el foco sobre él. Para enfocar un componente cuando la

ventana de la aplicación se visualiza, se invoca al método requestFocus:

En la mayoría de las ocasiones se requiere que el contenido de una caja de texto sea seleccionadoautomáticamente cuando recibe el foco. Para ello se asocia a cada caja de texto un manejador deeventos FocusEvent. Para interceptar este tipo de eventos, se añade a cada caja de texto unmanejador de tipo FocusListener. El mensaje que interesa interceptar es: “foco ganado:

focusGained”. El código se inserta en el método initComponents :

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 8/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 8 -

Para responder al evento “foco obtenido” ( focusGained ) se implementa el métodotxtGradosFocusGained . Este método obtiene el identificador de la caja de texto que obtiene el foco y le envía el mensaje selectAll:

3. Manejo de eventos de cajas de texto, etiquetas y botones.Se desarrollará una aplicación que permita convertir grados Centígrados a Fahrenheit, y viceversa. En esteejemplo se prescinde del botón Aceptar .

3.1. Agregar una nueva Clase Java: FrmConversor2, en el paquete eventos.

3.2. Escribir el código mostrado a continuación.

package eventos;

public class FrmConversor2 extends javax.swing.JFrame {private javax.swing.JLabel lblGradosC;private javax.swing.JTextField txtGradosC;private javax.swing.JLabel lblGradosF;

private javax.swing.JTextField txtGradosF;

public FrmConversor2() {setSize(300, 200);setTitle("Conversión de temperaturas");initComponents();

}

private void initComponents() {lblGradosC = new javax.swing.JLabel();txtGradosC = new javax.swing.JTextField();lblGradosF = new javax.swing.JLabel();txtGradosF = new javax.swing.JTextField();

getContentPane().setLayout(null);addWindowListener(new java.awt.event.WindowAdapter() {public void windowOpened(java.awt.event.WindowEvent evt) {

formWindowOpened(evt);}public void windowClosing(java.awt.event.WindowEvent evt){

exitForm(evt);}

});lblGradosC.setText("Grados centígrados");getContentPane().add(lblGradosC);lblGradosC.setBounds(12, 28, 116, 16);txtGradosC.setText("0.00");

txtGradosC.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); // Manejador de eventos asociado a la caja de textotxtGradosC.addFocusListener(new java.awt.event.FocusAdapter() {

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 9/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 9 -

public void focusGained(java.awt.event.FocusEvent evt) {txtGradosFocusGained(evt);

}});txtGradosC.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

txtGradosActionPerformed(evt);}});txtGradosC.addKeyListener(new java.awt.event.KeyAdapter() {

public void keyReleased(java.awt.event.KeyEvent evt) {txtGradosKeyReleased(evt);

}});getContentPane().add(txtGradosC);txtGradosC.setBounds(132, 28, 144, 20);lblGradosF.setText("Grados farenheit");getContentPane().add(lblGradosF);lblGradosF.setBounds(12, 68, 104, 24);

txtGradosF.setText("32.00");txtGradosF.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); // Manejador de eventos asociado a la caja de textotxtGradosF.addFocusListener(new java.awt.event.FocusAdapter() {

public void focusGained(java.awt.event.FocusEvent evt) {txtGradosFocusGained(evt);

}});txtGradosF.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {txtGradosActionPerformed(evt);

}});

txtGradosF.addKeyListener(new java.awt.event.KeyAdapter() {public void keyReleased(java.awt.event.KeyEvent evt) {

txtGradosKeyReleased(evt);}

});getContentPane().add(txtGradosF);txtGradosF.setBounds(132, 72, 144, 20);setLocationRelativeTo(null);

}

private void formWindowOpened(java.awt.event.WindowEvent evt) {txtGradosC.requestFocus();

}

private void exitForm(java.awt.event.WindowEvent evt) {System.exit(0);

}

private void txtGradosFocusGained(java.awt.event.FocusEvent evt) { javax.swing.JTextField objEnfocado = (javax.swing.JTextField)evt.getSource(); // Seleccionar el texto de una caja de textoobjEnfocado.selectAll();

}

private void txtGradosActionPerformed(java.awt.event.ActionEvent evt) {try {

double grados;String sgrados;

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 10/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 10 -

Object objTextField = evt.getSource(); // Si se escribió en la caja de texto grados centigrados:if (objTextField == txtGradosC) {

sgrados = txtGradosC.getText();if(sgrados.length() == 0)

return; // caja vacía

grados = Double.parseDouble(sgrados) * 9.0 / 5.0 + 32.0;String texto = String.format("%.2f", grados); // Redondear a 2 decimalestxtGradosF.setText(texto);

} // Si se escribió en la caja de texto grados farenheitif (objTextField == txtGradosF) {

sgrados = txtGradosF.getText();if(sgrados.length() == 0)

return;grados = (Double.parseDouble(sgrados) - 32.0) * 5.0 / 9.0;String texto = String.format("%.2f", grados);txtGradosC.setText(texto);

}

} catch (NumberFormatException e) {txtGradosC.setText("0.00");txtGradosF.setText("32.00");

}}

private void txtGradosKeyReleased(java.awt.event.KeyEvent evt) { // Obtener la caja de texto que generó el evento javax.swing.JTextField objTF = (javax.swing.JTextField)evt.getSource(); // fuente: almacena el contenido de la caja de textoString str = objTF.getText();char[] fuente = str.toCharArray();

// resultado: almacena el contenido de la caja de texto validado

char[] resultado = new char[fuente.length];int j=0;boolean error = false;

// Almacenar en resultado los caracteres válidos de fuentefor(int i=0; i<fuente.length; i++) {

if(fuente[i]>='0' && fuente[i]<='9' || fuente[i]=='.' || fuente[i]=='+' || fuente[i]=='-')resultado[j++] = fuente[i];

else {error = true;

java.awt.Toolkit.getDefaultToolkit().beep();}

}if(error)

objTF.setText(new String(resultado, 0, j));}

public static void main(String [] args) {try {

javax.swing.UIManager.setLookAndFeel( javax.swing.UIManager.getSystemLookAndFeelClassName());

} catch(Exception ex) { javax.swing.JOptionPane.showMessageDialog(new FrmConversor(),

"No se pudo establecer el aspecto deseado", "Aviso", 2);}new FrmConversor2().setVisible(true);

}

}

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 11/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 11 -

Al ejecutar la aplicación, se obtendrá un formulario similar al que se muestra a continuación:

En este nuevo diseño, luego de que el usuario modifica el contenido de una caja de texto y pulsa latecla Enter , se realiza el cálculo de la conversión y se actualiza la otra caja de texto. Para interceptarla tecla Enter , se asocia un manejador de tipo ActionListener con el componente de texto querecibe tal evento. En el método initComponents se encuentra el código:

Para responder al mensaje “se pulsó la tecla Enter “ se implementa el métodotxtGradosActionPerformed :

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 12/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 12 -

Validar un campo de texto equivale a restringir su contenido al conjunto de caracteres válidos paradicho campo. Si la validación de los datos se hace después de pulsar la tecla Enter en el componente

de texto (se produce el evento de acción ActionEvent

), el campo podría contener datos no válidos,aunque podrían ser validados antes de utilizarlos. En cambio si la validación se hace verificando la validez de cada tecla pulsada (se genera un evento de pulsación KeyEvent ), el campo de texto yaestará validado una vez finalizado el ingreso de datos.Cuando un componente de texto tiene el foco y el usuario pulsa una tecla se generan tres mensajes:keyPressed (cuando se pulsa la tecla), keyTyped (cuando se escribe el carácter) y keyReleased (cuando se suelta la tecla). Para que el componente responda deberá tener asociado un manejador deeventos de tipo KeyListener, o lo que es lo mismo, de tipo KeyAdapter.

En esta aplicación se considera que el contenido de las cajas de texto será válido cuando suscaracteres pertenezcan al siguiente conjunto: +-.1234567890. El signo + o – sólo puede aparecer alprincipio del dato y éste sólo puede contener un punto decimal.Para responder al evento “s e soltó la tecla: keyReleased” se implementa el métodotxtGradosKeyReleased , donde por cada pulsación:- Obtiene el contenido actual de la caja de texto que genera el mensaje keyReleased.- Lo almacena en una matriz de caracteres denominada fuente .- Aplicando las reglas enunciadas en el párrafo previo, copia los caracteres válidos en otra matriz

denominada resultado.- Reemplaza el contenido de la caja de texto con el contenido de resultado, sólo si algún carácter de

fuente no fue válido.

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 13/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 13 -

El método getDefaultToolkit devuelve un objeto de una subclase de java.awt.Toolkitque esutilizado para invocar al método beep. Cuando este método se ejecuta, se emite un pitido.

4. Manejo de eventos de cajas de texto, etiquetas y botones.Se desarrollará una aplicación que permita convertir grados Centígrados a Fahrenheit, y viceversa. La

validación de las cajas de texto se realiza con un documento asociado.

Los componentes Swing están basados en la arquitectura modelo-vista-controlador . En el caso de los campos detexto, el modeloestá definido por el documento de texto, la vista se refiere a cualquier perspectiva de esemodelo y el controlador se corresponde con los manejadores de eventos.Según esta arquitectura, para crear un campo validado hay que interceptar cada pulsación antes de que elcarácter sea insertado en el modelo, con el fin de insertar sólo los caracteres válidos. De esta forma la vistanunca podrá mostrar datos no válidos.El modelo (contenedor de texto) de un componente de texto es un objeto que implementa la interfazDocument. En el nivel más elemental, el texto es modelado como una secuencia lineal de caracteres. Estemodelo es creado por el método createDefaultModel de JTextField cada vez que se crea un objeto deesta clase.

4.1. Agregar una nueva Clase Java: JTextFieldDouble, en el paquete eventos.

4.2. Escribir el código mostrado a continuación.

package eventos;

public class JTextFieldDouble extends javax.swing.JTextField {

protected javax.swing.text.Document createDefaultModel() {return new PlainDocumentDouble();

}

protected class PlainDocumentDouble extends javax.swing.text.PlainDocument {

public void insertString(int offs, String str, javax.swing.text.AttributeSet a)throws javax.swing.text.BadLocationException {

// fuente: almacena el contenido de la caja de textochar[] fuente = str.toCharArray();

// resultado: almacena el contenido de la caja de texto validadochar[] resultado = new char[fuente.length];int j = 0;

// Almacenar en resultado los caracteres válidos de fuentefor (int i = 0; i < fuente.length; i++) {

if (fuente[i] >= '0' && fuente[i] <= '9' || fuente[i] == '.' || fuente[i] == '+' || fuente[i] == '-' ||fuente[i] == ',') {

resultado[j++] = fuente[i];} else {

java.awt.Toolkit.getDefaultToolkit().beep();}

}super.insertString(offs, new String(resultado, 0, j), a);

}}

}

El método createDefaultModel retorna de forma predeterminada un objetojavax.swing.text.PlainDocumentque se corresponde con el contenedor de texto; esto es, con elmodelo. Cada vez que se cree un objeto de la clase JTextFieldDouble , createDefaultModelcreará el

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 14/16

Universidad Nacional de Trujillo Tecnología de la Programación II Ingeniería de Sistemas Componentes Interfaz Gráfica de Usuario – Parte III

Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 14 -

modelo asociado con dicho objeto, que como se puede observar, será un objeto de la clasePlainDocumentDouble .La clase PlainDocumentDouble crea el contenedor de texto (el modelo). Esta clase hereda un métodollamado insertString que será invocado de forma automática por un objeto JTextFieldDouble cada

vez que haya que insertar un carácter en el contenedor de texto (porque el usuario pulsó una tecla), ouna cadena de caracteres (porque se invocó al método setText ). Este método ha sido implementadopara que antes de insertar el carácter o la cadena de caracteres en el modelo, valide esta información.Una vez realizada la validación, el método insertString de la clase JTextFieldDouble se limitará a llamaral método insertStringde la clase padre pasándole como argumento la información validada paraque sea insertada en el modelo y visualizada en la vista del objeto JTextFieldDouble .

4.3. Agregar una nueva Clase Java: FrmConversor3, en el paquete eventos.

4.4. Escribir el código mostrado a continuación.

package eventos;

public class FrmConversor3 extends javax.swing.JFrame {

rivate javax.swing.JLabel lblGradosC;rivate JTextFieldDouble txtGradosC;rivate javax.swing.JLabel lblGradosF;rivate JTextFieldDouble txtGradosF;

ublic FrmConversor3() {setSize(300, 200);setTitle("Conversión de temperaturas");initComponents();

}

private void initComponents() {lblGradosC = new javax.swing.JLabel();

txtGradosC = new JTextFieldDouble();lblGradosF = new javax.swing.JLabel();txtGradosF = new JTextFieldDouble();getContentPane().setLayout(null);addWindowListener(new java.awt.event.WindowAdapter() {

public void windowOpened(java.awt.event.WindowEvent evt) {formWindowOpened(evt);

}public void windowClosing(java.awt.event.WindowEvent evt){

exitForm(evt);}

});lblGradosC.setText("Grados Centígrados");

getContentPane().add(lblGradosC);lblGradosC.setBounds(12, 28, 116, 16);txtGradosC.setText("0.00");txtGradosC.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);

// Manejador de eventos asociado a la caja de textotxtGradosC.addFocusListener(new java.awt.event.FocusAdapter() {

public void focusGained(java.awt.event.FocusEvent evt) {txtGradosFocusGained(evt);

}});txtGradosC.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {txtGradosActionPerformed(evt);

}});

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 15/16

8/7/2019 Componentes GUI Parte III

http://slidepdf.com/reader/full/componentes-gui-parte-iii 16/16