Está en la página 1de 30

1

LABORATORIO PROGRAMACIN JAVA



SESIN 7:
GUIs CON SWING


1. Ejemplos Swing

Lo primero que haremos ser crear un proyecto llamado SwingGUI donde meteremos todos nuestros
ejemplos y ejercicios.



1.1 BOTONES

La primera aplicacin que haremos consistir en una ventana con una caja de texto en la que se
introducir un texto que copiaremos en otra caja mediante la pulsacin de un botn. Para realizarla
tenemos que crear en el proyecto un nuevo fichero de tipo JFrame.

2





3


Para realizar la aplicacin tendremos que ir arrastrando componentes a la ventana. NetBeans nos
proporciona un Layout propio que ir situando los componentes en el contenedor en las posiciones y
tamaos que nosotros deseemos. Situaremos un JLabel con el texto correspondiente, dos JTextField (en
uno de ellos no se permite la edicin) y dos botones.

Para el tratamiento de los eventos, pulsamos con el botn derecho del ratn en cada uno de los botones y
seleccionamos Events Action actionPerformed y rellenamos con el cdigo en negrita.


En las propiedades del JFrame debemos poner como ttulo de la ventana BotonesTexto y desmarcar la
casilla resizable y en el cdigo seleccionar Generate Resize Code.

4
Cdigo final:

package gui;

public class BotonesTexto extends javax.swing.JFrame {

/** Creates new form BotonesTexto */
public BotonesTexto() {
initComponents();
}

// <editor-fold defaultstate="collapsed" desc=" Generated Code ">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jTextField2 = new javax.swing.JTextField();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("BotonesTexto");
setResizable(false);
jLabel1.setText("Introduce un texto y pulsa Copiar");

jButton1.setText("Copiar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

jButton2.setText("Borrar");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});

jTextField2.setEditable(false);

javax.swing.GroupLayout layout
= new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(layout.createSequentialGroup()
.addGap(39, 39, 39)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(jButton2)
.addGap(51, 51, 51)))

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE,
152, Short.MAX_VALUE)
.addGap(52, 52, 52))
.addGroup(layout.createSequentialGroup()
.addComponent(jTextField2,
javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(61, Short.MAX_VALUE)))
.addGroup(layout.createSequentialGroup()
5
.addComponent(jButton1)
.addContainerGap())))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(52, 52, 52)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(31, 31, 31)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton2)
.addComponent(jButton1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21,
Short.MAX_VALUE)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(22, 22, 22))
);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-425)/2, (screenSize.height-225)/2, 425, 225);
}// </editor-fold>

//BORRAR
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
jTextField1.setText("");
jTextField2.setText("");
}

//COPIAR
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String txt = jTextField1.getText();
if (txt.equals("")) JOptionPane.showMessageDialog(this,"Rellene el
texto.","Mensaje",JOptionPane.INFORMATION_MESSAGE);
jTextField2.setText(txt);
}


public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new BotonesTexto().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
// End of variables declaration

}


Ejercicio: Escribir un programa que represente una ventana que contenga dos cajas de texto y dos
botones, uno etiquetado con MAYSCULAS y otro con minsculas. Cuando se pulse el botn de
maysculas se deber convertir el contenido de la primera caja de texto a maysculas y si se pulsa el
otro a minsculas y presentarlo en la segunda caja de texto. Si no hay texto se debe presentar un mensaje
de error.

6
1.2 LISTAS

En este ejemplo utilizaremos las listas como componentes principales. Para realizarlo tenemos que crear
en el proyecto un nuevo fichero de tipo JFrame.

En la ventana de aplicacin pondremos un JLabel con el texto correspondiente, un JComboBox, un JList
y un JTextField (no se permite la edicin).



Para dar los datos iniciales de las listas debemos abrir sus propiedades y editar el campo Model.



Para el tratamiento de los eventos, pulsamos con el botn derecho del ratn en cada una de las listas y
seleccionamos: para el JComboBox Events Action actionPerformed y para el JList Events
ListSelection valueChanged, por ltimo, rellenamos con el cdigo en negrita.

Cdigo final:

package gui;

public class Listas extends javax.swing.JFrame {
7

/** Creates new form Listas */
public Listas() {
initComponents();
}

// <editor-fold defaultstate="collapsed" desc=" Generated Code ">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jComboBox1 = new javax.swing.JComboBox();
jScrollPane1 = new javax.swing.JScrollPane();
jList1 = new javax.swing.JList();
jTextField1 = new javax.swing.JTextField();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Listas");
setResizable(false);
jLabel1.setText("Selecciona Marca y Equipamiento");

jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Citroen",
"Fiat", "Ford", "Opel", "Peugeot", "Renault" }));
jComboBox1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jComboBox1ActionPerformed(evt);
}
});

jList1.setModel(new javax.swing.AbstractListModel() {
String[] strings = { "ABS", "Aire Ac.", "Air-Bag", "Dir. Asist.", "EE", "Pintura
Met.", "MP3" };
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings[i]; }
});
jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
jList1ValueChanged(evt);
}
});
jScrollPane1.setViewportView(jList1);
javax.swing.GroupLayout layout
= new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addGap(41, 41, 41)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 155,
Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(40, 40, 40))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 277,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(47, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(75, 75, 75)
.addComponent(jLabel1)
.addContainerGap(101, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(27, 27, 27)
.addComponent(jLabel1)
.addGap(8, 8, 8)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
8
.addGroup(layout.createSequentialGroup()
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(39, 39, 39))
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 19,
Short.MAX_VALUE)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(21, 21, 21))
);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-350)/2, (screenSize.height-275)/2, 350, 275);
}// </editor-fold>

private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {
// TODO add your handling code here:
//borramos texto e inicializamos equipamiento
jTextField1.setText("");
equipamiento = " - ";
//capturamos los items seleccionados
// y los convertimos en cadena
Object equipo_selec[] = jList1.getSelectedValues();
for(int j=0;j<equipo_selec.length;++j) equipamiento +=
equipo_selec[j]+" - ";

//presentamos la seleccin de marca y equipamiento
jTextField1.setText(marca_selec+equipamiento);
}

private String marca_selec, equipamiento;

private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//borramos texto
jTextField1.setText("");
//deseleccionamos el equipamiento
jList1.clearSelection();
//capturamos la marca seleccionada
marca_selec = "Marca: "+(String)jComboBox1.getSelectedItem()+" # ";
jTextField1.setText(marca_selec);
}

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Listas().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JComboBox jComboBox1;
private javax.swing.JLabel jLabel1;
private javax.swing.JList jList1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextField jTextField1;
// End of variables declaration

}

Ejercicio: Escribir un programa que represente una ventana que contenga dos cajas de texto y una lista
desplegable con las opciones MAYSCULAS y minsculas. Cuando se pulse la opcin de
maysculas se deber convertir el contenido de la primera caja de texto a maysculas y si se pulsa la otra
a minsculas y a continuacin presentarla en la segunda caja de texto.

9
1.3 LISTAS DINMICAS

En este ejemplo utilizaremos las listas como componentes principales, pero en este caso las opciones que
aparecen en las listas se recogern de ficheros de texto para poder hacer cambios de forma dinmica.
Para realizarlo tenemos que crear en el proyecto un nuevo fichero de tipo JFrame.

En la ventana de aplicacin pondremos un JLabel con el texto correspondiente, un JComboBox, un JList
y un JTextField (no se permite la edicin).



Para dar los datos iniciales de las listas debemos abrir sus propiedades y programar el campo Model.
Pulsamos el botn Advanced y rellenamos como se muestra a continuacin:



Para el tratamiento de los eventos, pulsamos con el botn derecho del ratn en cada una de las listas y
seleccionamos: para el JComboBox Events Action actionPerformed y para el JList Events
ListSelection valueChanged, por ltimo, rellenamos con el cdigo en negrita.

10
Cdigo final:

package gui;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;
import javax.swing.JComboBox;

public class ListasDin extends javax.swing.JFrame {

/** Creates new form ListasDin */
public ListasDin() {
initComponents();
jComboBox1.setSelectedIndex(0);
}

/** 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=" Generated Code ">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jComboBox1 = new javax.swing.JComboBox();
jTextField1 = new javax.swing.JTextField();
jScrollPane1 = new javax.swing.JScrollPane();
jList1 = new javax.swing.JList();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setResizable(false);
jLabel1.setFont(new java.awt.Font("Tahoma", 0, 18));
jLabel1.setText("Selecciona una marca de portatil y extras:");

getMarcas();
jComboBox1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jComboBox1ActionPerformed(evt);
}
});

jTextField1.setEditable(false);

getExtras();
jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
jList1ValueChanged(evt);
}
});

jScrollPane1.setViewportView(jList1);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(36, 36, 36)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addGroup(layout.createSequentialGroup()
.addGap(22, 22, 22)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE,
307, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
11
.addComponent(jComboBox1,
javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(41, 41, 41)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 166, Short.MAX_VALUE)))))
.addGap(36, 36, 36))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(59, 59, 59)
.addComponent(jLabel1)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(45, 45, 45)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(22, 22, 22)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE,
91, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(30, 30, 30)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(56, Short.MAX_VALUE))
);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-416)/2, (screenSize.height-336)/2, 416, 336);
}// </editor-fold>

private String marca_selec, extras;

private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {
// TODO add your handling code here:
//borramos texto e inicializamos equipamiento
jTextField1.setText("");
extras = " - ";
//capturamos los items seleccionados
// y los convertimos en cadena
Object extras_selec[] = jList1.getSelectedValues();
for(int j=0;j<extras_selec.length;++j) extras += extras_selec[j]+" - ";

//presentamos la seleccin de marca y equipamiento
jTextField1.setText(marca_selec+extras);
}

private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//borramos texto
jTextField1.setText("");
//deseleccionamos el equipamiento
jList1.clearSelection();
//capturamos la marca seleccionada
marca_selec = "Marca: "+(String)jComboBox1.getSelectedItem()+" # ";
jTextField1.setText(marca_selec);
}

// rellenamos las opciones de la lista desplegable
private void getMarcas() {
String cad;
Vector marcas = new Vector();
try {
BufferedReader br =
new BufferedReader(new FileReader("marcas.txt"));
while ((cad = br.readLine()) != null) {
marcas.add(cad);
}
//Cerramos el stream
br.close();
jComboBox1 = new JComboBox(marcas);
} catch (IOException ioe) {
12
System.out.println(ioe);
}
}

// rellenamos las opciones de la lista
private void getExtras() {
String cad;
Vector extras = new Vector();
try {
BufferedReader br =
new BufferedReader(new FileReader("extras.txt"));
while ((cad = br.readLine()) != null) {
extras.add(cad);
}
//Cerramos el stream
br.close();
jList1.setListData(extras);
} catch (IOException ioe) {
System.out.println(ioe);
}
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ListasDin().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JComboBox jComboBox1;
private javax.swing.JLabel jLabel1;
private javax.swing.JList jList1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextField jTextField1;
// End of variables declaration

}



13
2. Ejercicio Calculadora Swing

Escribir un programa en Java que permita realizar las operaciones tpicas de una calculadora: suma,
resta, multiplicacin y divisin. El usuario introducir el operando 1 el 2 y luego seleccionar la
operacin a realizar, mostrando el resultado correspondiente. Tambin debe tener la posibilidad de
convertir de pesetas a euros y viceversa. El programa deber tratar todos los posibles errores en tiempo
de ejecucin, dando un mensaje con un dilogo de error.

El aspecto grfico del programa puede ser como el siguiente:





3. Ejercicio Censo

El segundo ejercicio consiste en la gestin de un censo donde tenemos los datos de una serie de
personas. Las operaciones que se pueden hacer en la aplicacin sern las tpicas de este tipo de SI, es
decir, altas, bajas, modificaciones y consultas. Utilizaremos una clase Persona que nos servir como base
de la aplicacin y que tendr como atributos el DNI, el nombre, la direccin y el telfono.

A continuacin se presentan unas pantallas de la aplicacin a modo de ejemplo.







14
4. Solucin Aplicacin Censo Swing
4.1 Proyecto Censo

Lo primero que debemos hacer es crear un proyecto de tipo Java Application llamado Censo.

4.2 Clases Persona y UtilCenso

Una vez creado el proyecto vamos a crear la clase Persona que ser la encargada de almacenar los datos
de la aplicacin.

Debemos crear todos los atributos y los mtodos que necesitemos de forma que el cdigo final quedar
as:

package censo;

import java.io.Serializable;

public class Persona implements Serializable {

/** Creates a new instance of Persona */
public Persona(String p_dni, String p_nombre, String p_direccion, int p_tfno) {
dni = p_dni;
nombre = p_nombre;
direccion = p_direccion;
tfno = p_tfno;
}

private String dni;

private String nombre;

private String direccion;

private int tfno;

public String getDni() {
return this.dni;
}

public String getNombre() {
return this.nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getDireccion() {
return this.direccion;
}

public void setDireccion(String direccion) {
this.direccion = direccion;
}

public int getTfno() {
return this.tfno;
}

public void setTfno(int tfno) {
15
this.tfno = tfno;
}

public String toString() {
return dni + " " + nombre;
}
}

Como tenemos que realizar una serie de operaciones con los objetos de tipo persona vamos a crear una
clase de utilidades que permita la gestin de los mismos.

package censo;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.*;

public class UtilCenso {

/** Creates a new instance of UtilCenso */
public UtilCenso() {
}
private static HashMap<String, Persona> personas = new HashMap<String,
Persona>();

public static boolean vacia() {
return personas.isEmpty();
}

public static void setPersonas(HashMap p) {
personas = p;
}

public static HashMap getPersonas() {
return personas;
}

/* Devolvemos un array con las personas ordenadas por nombre */
public static Object[] getArrayPersonas() {
//Comparador para ordenar las personas por su nombre
Comparator NomPerComp = new Comparator() {
public int compare(Object o1, Object o2) {
Persona p1 = (Persona) o1;
Persona p2 = (Persona) o2;
return p1.getNombre().compareTo(p2.getNombre());
}
};
//array auxiliar
Object peraux[];
//Cargamos todas las personas en un array
peraux = personas.values().toArray();
//Ordenamos el array
Arrays.sort(peraux, NomPerComp);
return peraux;
}

public static void altaPersona(Persona objper) {
personas.put(objper.getDni(), objper);
}

public static void bajaPersona(String dni) {
16
personas.remove(dni);
}

public static boolean modificaPersona(String p_dni, String p_nombre,
String p_direccion, int p_tfno) {
Persona p = personas.get(p_dni);
if (p == null) {
return false;
}
p.setNombre(p_nombre);
p.setDireccion(p_direccion);
p.setTfno(p_tfno);
return true;
}

public static Persona consultaPersona(String dni) {
Persona objper = (Persona) personas.get(dni);
return objper;
}

/* Carga los datos de personas del fichero */
public static void cargarDatos() {
try {
//Lectura de los objetos de tipo persona
FileInputStream istreamPer = new FileInputStream("copiasegPer.dat");
ObjectInputStream oisPer = new ObjectInputStream(istreamPer);
personas = (HashMap) oisPer.readObject();
istreamPer.close();
} catch (IOException ioe) {
System.out.println("Error de IO: " + ioe.getMessage());
} catch (ClassNotFoundException cnfe) {
System.out.println("Error de clase no encontrada: "
+ cnfe.getMessage());
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}//fin cargarDatos

/* Guarda los datos de personas en el fichero */
public static void guardarDatos() {
try {
//Si hay datos los guardamos...
if (!vacia()) {
/****** Serializacin de los objetos ******/
//Serializacin de las personas
FileOutputStream ostreamPer =
new FileOutputStream("copiasegPer.dat");
ObjectOutputStream oosPer = new ObjectOutputStream(ostreamPer);
//guardamos la hashtable de personas
oosPer.writeObject(personas);
ostreamPer.close();
} else {
System.out.println("Error: No hay datos...");
}
} catch (IOException ioe) {
System.out.println("Error de IO: " + ioe.getMessage());
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}//fin guardarDatos
}
17
4.3 Frame Censo

Con respecto a la interfaz lo primero que debemos hacer es crear un frame que represente la ventana
principal.



Cdigo final:

package censo;

public class Censo extends javax.swing.JFrame {

/** Creates new form Censo */
public Censo() {
UtilCenso.cargarDatos();
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="Generated Code">
private void initComponents() {

jLabel1 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();

18
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("CENSO");
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
getContentPane().setLayout(null);

jLabel1.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
jLabel1.setText("CENSO");
jLabel1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
getContentPane().add(jLabel1);
jLabel1.setBounds(160, 20, 80, 29);

jButton1.setText("ALTAS");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
getContentPane().add(jButton1);
jButton1.setBounds(120, 120, 160, 23);

jButton2.setText("CONSULTAS");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
getContentPane().add(jButton2);
jButton2.setBounds(120, 180, 160, 23);

jLabel2.setFont(new java.awt.Font("Tahoma", 2, 18)); // NOI18N
jLabel2.setText("SELECCIONA OPCIN");
jLabel2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
getContentPane().add(jLabel2);
jLabel2.setBounds(110, 70, 180, 22);

java.awt.Dimension screenSize
= java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-396)/2, (screenSize.height-318)/2, 396, 318);
}// </editor-fold>

19
//CONSULTAS
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Consultas c = new Consultas(this);
}

//ALTAS
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Altas a = new Altas(this);
}

private void formWindowClosing(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
UtilCenso.guardarDatos();
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Censo().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
// End of variables declaration

}
20
4.4 Panel Datos

Una vez creada la ventana principal vamos a pasar a realizar las ventanas de altas y consultas.

Como ambos frames comparten el mismo formulario de datos de las personas, crearemos un JPanel
que contenga esos datos.



Para poder acceder a los campos de texto desde cualquier frame necesitamos una serie de mtodos que
nos permitan tanto escribir como leer de ellos. El cdigo final sera el siguiente:

Cdigo final:

package censo;

public class PanelDatos extends javax.swing.JPanel {

/** Creates new form PanelDatos */
public PanelDatos() {
initComponents();
}

//metodos para devolver y presentar el contenido de las cajas de texto
public String getJTextFieldDir() {
return jTextFieldDir.getText();
}

public void setJTextFieldDir(String txt) {
this.jTextFieldDir.setText(txt);
}

public String getJTextFieldDni() {
21
return jTextFieldDni.getText();
}

public void setJTextFieldDni(String txt) {
this.jTextFieldDni.setText(txt);
}

public String getJTextFieldNom() {
return jTextFieldNom.getText();
}

public void setJTextFieldNom(String txt) {
this.jTextFieldNom.setText(txt);
}

public String getJTextFieldTfno() {
return jTextFieldTfno.getText();
}

public void setJTextFieldTfno(String txt) {
this.jTextFieldTfno.setText(txt);
}

//borra el contenido del panel
public void borrar() {
setJTextFieldDni("");
setJTextFieldNom("");
setJTextFieldDir("");
setJTextFieldTfno("");
}

/** 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="Generated Code">
private void initComponents() {

jLabel1 = new javax.swing.JLabel();
jTextFieldDni = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jTextFieldNom = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
jTextFieldDir = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
jTextFieldTfno = new javax.swing.JTextField();

setBackground(new java.awt.Color(153, 255, 153));
setLayout(new java.awt.GridLayout(4, 2));

jLabel1.setText("DNI");
add(jLabel1);
add(jTextFieldDni);

jLabel2.setText("NOMBRE");
add(jLabel2);
add(jTextFieldNom);

jLabel3.setText("DIRECCIN");
add(jLabel3);
add(jTextFieldDir);

jLabel4.setText("TFNO");
22
add(jLabel4);
add(jTextFieldTfno);
}// </editor-fold>

// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JTextField jTextFieldDir;
private javax.swing.JTextField jTextFieldDni;
private javax.swing.JTextField jTextFieldNom;
private javax.swing.JTextField jTextFieldTfno;
// End of variables declaration

}

Para que est disponible para los frames de altas y consulta debemos aadirlo a la paleta de
componentes, pulsando con el botn derecho en PanelDatos.java Tools Add to Pallete.

4.5 Frame Altas

Ahora pasamos a realizar el frame de Altas. Utilizaremos un layout nulo donde pondremos nuestros
componentes. Este frame se encargar de ocultar la ventana principal para que el usuario no pueda
realizar ms acciones con ella y solo trabaje con una ventana a la vez.



23
Cdigo final:

package censo;

import javax.swing.*;

public class Altas extends javax.swing.JFrame {

private JFrame principal;
/** Creates new form Altas */
public Altas(JFrame ventana) {
initComponents();
principal = ventana;
principal.setVisible(false);
this.setVisible(true);
}

/** 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=" Generated Code ">
private void initComponents() {
panelDatos1 = new censo.PanelDatos();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();

getContentPane().setLayout(null);

setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("ALTAS");
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosed(java.awt.event.WindowEvent evt) {
formWindowClosed(evt);
}
});

getContentPane().add(panelDatos1);
panelDatos1.setBounds(14, 106, 370, 160);

jButton1.setText("ALTA");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

getContentPane().add(jButton1);
jButton1.setBounds(70, 50, 70, 23);

jButton2.setText("BORRAR");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});

getContentPane().add(jButton2);
jButton2.setBounds(250, 50, 80, 23);

jLabel1.setFont(new java.awt.Font("Tahoma", 0, 18));
24
jLabel1.setText("ALTAS CENSO");
getContentPane().add(jLabel1);
jLabel1.setBounds(140, 10, 120, 22);

java.awt.Dimension screenSize =
java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-400)/2, (screenSize.height-325)/2, 400, 325);
}
// </editor-fold>

//Cerrar ventana
private void formWindowClosed(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
//Volvemos a mostrar la ventana principal
principal.setVisible(true);
}

//BORRAR
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
panelDatos1.borrar();
}

//ALTA
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String dni = panelDatos1.getJTextFieldDni();
String nombre = panelDatos1.getJTextFieldNom();
String dir = panelDatos1.getJTextFieldDir();
int tfno = Integer.parseInt(panelDatos1.getJTextFieldTfno());

Persona objper= new Persona(dni, nombre, dir, tfno);
UtilCenso.altaPersona(objper);
JOptionPane.showMessageDialog(this,"Persona dada de
alta.","Mensaje",JOptionPane.INFORMATION_MESSAGE);
}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private censo.PanelDatos panelDatos1;
// End of variables declaration

}


25
4.6 Frame Consultas

Ahora pasamos a realizar el frame de Consultas. Utilizaremos un layout nulo donde pondremos nuestros
componentes. Este frame se encargar de ocultar la ventana principal para que el usuario no pueda
realizar ms acciones con ella y solo trabaje con una ventana a la vez.



Cdigo final:

package censo;

import javax.swing.*;

public class Consultas extends javax.swing.JFrame {

private JFrame principal;

/** Creates new form Consultas */
public Consultas(JFrame ventana) {
initComponents();
consultarTodo();
principal = ventana;
principal.setVisible(false);
this.setVisible(true);
}

Persona objper;
private Object peraux[];
private int contador=0;

/** Consulta las personas de la tabla hash y las ordena para su presentacin */
private void consultarTodo() {
try {
26
contador=0;
//Cargamos todas las personas en un array
peraux = UtilCenso.getArrayPersonas();
//Si no hay personas...
if (peraux.length<1) {
JOptionPane.showMessageDialog(this,"No hay
personas.","Mensaje",JOptionPane.INFORMATION_MESSAGE);
jButton3.setEnabled(false);
jButton4.setEnabled(false);
return;
} else {
jButton3.setEnabled(true);
jButton4.setEnabled(true);
}
//Presentamos la primera persona
objper = (Persona) peraux[0];
if (objper != null) {
presenta(objper);
} else {
JOptionPane.showMessageDialog(this,"No hay
personas.","Mensaje",JOptionPane.INFORMATION_MESSAGE);
return;
}
} catch (Exception e) {
JOptionPane.showMessageDialog(this,"Error:
"+e.getMessage(),"Mensaje",JOptionPane.ERROR_MESSAGE);
System.out.println("Error: "+e.toString());
return;
}
}//fin consultarTodo

/** Presenta los datos de una persona */
private void presenta(Persona objper) {
panelDatos1.setJTextFieldDni(objper.getDni());
panelDatos1.setJTextFieldNom(objper.getNombre());
panelDatos1.setJTextFieldDir(objper.getDireccion());
panelDatos1.setJTextFieldTfno(""+objper.getTfno());
}

/** 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=" Generated Code ">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
panelDatos1 = new censo.PanelDatos();
jButton2 = new javax.swing.JButton();
jButton1 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jButton4 = new javax.swing.JButton();
jButton5 = new javax.swing.JButton();
jButton6 = new javax.swing.JButton();

getContentPane().setLayout(null);

setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("CONSULTAS");
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosed(java.awt.event.WindowEvent evt) {
formWindowClosed(evt);
}
27
});

jLabel1.setFont(new java.awt.Font("Tahoma", 0, 18));
jLabel1.setText("CONSULTAS CENSO");
getContentPane().add(jLabel1);
jLabel1.setBounds(110, 10, 170, 22);

getContentPane().add(panelDatos1);
panelDatos1.setBounds(14, 116, 370, 140);

jButton2.setFont(new java.awt.Font("Tahoma", 2, 11));
jButton2.setText("BORRAR");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});

getContentPane().add(jButton2);
jButton2.setBounds(300, 260, 80, 23);

jButton1.setText("CONSULTAR");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

getContentPane().add(jButton1);
jButton1.setBounds(20, 50, 120, 23);

jButton3.setFont(new java.awt.Font("Tahoma", 1, 12));
jButton3.setText("SIG");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});

getContentPane().add(jButton3);
jButton3.setBounds(110, 90, 60, 23);

jButton4.setFont(new java.awt.Font("Tahoma", 1, 12));
jButton4.setText("ANT");
jButton4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton4ActionPerformed(evt);
}
});

getContentPane().add(jButton4);
jButton4.setBounds(220, 90, 70, 23);

jButton5.setText("MODIFICAR");
jButton5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton5ActionPerformed(evt);
}
});

getContentPane().add(jButton5);
jButton5.setBounds(160, 50, 110, 23);

jButton6.setText("BAJA");
28
jButton6.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton6ActionPerformed(evt);
}
});

getContentPane().add(jButton6);
jButton6.setBounds(290, 50, 80, 23);

java.awt.Dimension screenSize =
java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-400)/2, (screenSize.height-325)/2, 400, 325);
}
// </editor-fold>

//Cerrar ventana
private void formWindowClosed(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
//Volvemos a mostrar la ventana principal
principal.setVisible(true);
}

//BORRAR
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
panelDatos1.borrar();
}

//ANT
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//Comprobamos el rango del array...
if (contador>=1 && contador<=peraux.length-1) {
contador--;
objper = (Persona) peraux[contador];
if (objper != null) {
presenta(objper);
} else {
JOptionPane.showMessageDialog(this,"No hay
personas.","Mensaje",JOptionPane.INFORMATION_MESSAGE);
}
}
return;
}

//SIG
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//Comprobamos el rango del array...
if (contador>=0 && contador<=peraux.length-2) {
contador++;
objper = (Persona) peraux[contador];
if (objper != null) {
presenta(objper);
} else {
JOptionPane.showMessageDialog(this,"No hay
personas.","Mensaje",JOptionPane.INFORMATION_MESSAGE);
}
}
return;
}

//BAJA
private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {
29
// TODO add your handling code here:
String dni = panelDatos1.getJTextFieldDni();
//obtenemos la persona de la tabla hash.
objper = UtilCenso.consultaPersona(dni);
if (objper != null) {
UtilCenso.bajaPersona(dni);
JOptionPane.showMessageDialog(this,"Persona dada de baja: "+
objper.toString(),"Mensaje",JOptionPane.INFORMATION_MESSAGE);
panelDatos1.borrar();
} else {
JOptionPane.showMessageDialog(this," Error: - Persona no encontrada
","Mensaje",JOptionPane.ERROR_MESSAGE);
}
consultarTodo();
return;
}

//MODIFICAR
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String dni = panelDatos1.getJTextFieldDni();
//obtenemos la persona de la tabla hash.
objper = UtilCenso.consultaPersona(dni);
if (objper != null) {
//capturamos la nueva informacin y modificamos el objeto
String nombre = panelDatos1.getJTextFieldNom();
String dir = panelDatos1.getJTextFieldDir();
int tfno = Integer.parseInt(panelDatos1.getJTextFieldTfno());
UtilCenso.modificaPersona(dni, nombre, dir, tfno);
JOptionPane.showMessageDialog(this,"Persona modificada: "+
objper.toString(),"Mensaje",JOptionPane.INFORMATION_MESSAGE);
panelDatos1.borrar();
consultarTodo();
} else {
JOptionPane.showMessageDialog(this," Error: - Persona no encontrada
","Mensaje",JOptionPane.ERROR_MESSAGE);
}
return;
}

//CONSULTAR
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String dni = panelDatos1.getJTextFieldDni();
if ( dni.equals("") ) {
JOptionPane.showMessageDialog(this,"Rellene el DNI de la
persona.","Mensaje",JOptionPane.INFORMATION_MESSAGE);
return;
}

//obtenemos la persona de la tabla hash.
objper = UtilCenso.consultaPersona(dni);

if (objper != null) {
//presentamos la informacin
presenta(objper);
//Calculamos la posicin de la persona en el array
for (int j=0; j<=peraux.length; j++) {
if ( objper.equals((Persona) peraux[j]) ) {
contador=j;
break;
}
}
} else {
30
JOptionPane.showMessageDialog(this," Error: - Persona no encontrada
","Mensaje",JOptionPane.ERROR_MESSAGE);
consultarTodo();
}
return;
}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JButton jButton5;
private javax.swing.JButton jButton6;
private javax.swing.JLabel jLabel1;
private censo.PanelDatos panelDatos1;
// End of variables declaration

}

También podría gustarte