Anda di halaman 1dari 4

CUNDO USAR JFRAME Y CUNDO JDIALOG

En una aplicacin java con ventanas debera haber un nico JFrame, correspondiente a l
a ventana principal de la aplicacin. El resto de ventanas secundarias deberan ser
JDialog.
Por qu es esto?
Un JFrame en una ventana que en Windows crea, en la barra de herramientas, donde
est el men de "inicio" y las aplicaciones que tenemos abiertas, un nuevo botn de a
plicacin abierta. En una aplcacin lo normal es que slo haya un botn ah. Si creamos va
rios JFrame en nuestra aplicacin, apareceran varios botones, uno por cada JFrame.
El JDialog no muestra este botn. Por ello, el resto de las ventanas de nuestra ap
licacin deberas ser JDialog.
Hay otro motivo ms. Un JFrame no admite a ninguna otra ventana como padre. El JDi
alog s admite como padres un JFrame u otros JDialog. Esto es importante porque un
a ventana hija siempre quedar por encima de su ventana padre. Si al crear los JDi
alog les pasamos el JFrame como padre, los JDialog siempre estarn visibles por en
cima del JFrame. No se podrn ir "detrs" de l.
Si adems, en el constructor del JDialog ponemos a true el flag que indica que es
modal, adems de pasarle una ventana padre, entonces el JDialog impedir el acceso a
las otras ventanas hasta que se cierre. Esta seria una forma de crear el JFrame
y el JPanel pueden tambin descargarse el cdigo fuente el link lo deje mas abajo.
String path="";//creamos una variable global para guardar el path
private void open() throws IOException {
//empezamos implementando la clase JFileChooser para abrir archivos
JFileChooser JFC = new JFileChooser();
//filtro que muestra solo los archivos con extension *.edu
JFC.setFileFilter(new FileNameExtensionFilter("todos los archivos *.EDU"
, "edu","EDU"));
//se comprueba si se ha dado al boton aceptar
int abrir = JFC.showDialog(null, "Abrir");
if (abrir == JFileChooser.APPROVE_OPTION) {
FileReader FR = null;
BufferedReader BR = null;
try {
//abro el fichero y creo un BufferedReader para hacer
//una lectura comoda (tener el metodo readLine();)
File archivo = JFC.getSelectedFile();//abre un archivo .lengf
//evitar abrir archivo con otra extension que no sea *.LFP
String PATH = JFC.getSelectedFile().getAbsolutePath();
if(PATH.endsWith(".edu")||PATH.endsWith(".EDU")){
FR = new FileReader(archivo);
BR = new BufferedReader(FR);
//leyendo el archivo
String linea;//variable para leer linea por linea el archivo
de entrada
if(path.compareTo(archivo.getAbsolutePath())==0){
JOptionPane.showMessageDialog(this, "Archivo Abierto","O
ops! Error", JOptionPane.ERROR_MESSAGE);
}else{
path = archivo.getAbsolutePath();

jTextArea.setText(null);//limpiamos el textArea antes de


sobreescribir
while((linea=BR.readLine())!=null){ //cuando termina el
texto del archivo?
jTextArea.append(linea+"\n");//utilizamos append par
a escribir en el textArea
}
}
}else{
JOptionPane.showMessageDialog(this, "Archivo no soportado","
Oops! Error", JOptionPane.ERROR_MESSAGE);
open();
}
} catch (FileNotFoundException ex) {
ex.printStackTrace();
//Logger.getLogger(fileChooser.class.getName()).log(Level.SEVERE
, null, ex);
//cerramos el fichero, para asegurar que se cierra tanto
// si todo va bien si salta una excepcion
} finally {
try {
if(null!= FR){
FR.close();
}
} catch (IOException ex) {
ex.printStackTrace();
//Logger.getLogger(fileChooser.class.getName()).log(Level.SE
VERE, null, ex);
}
}
}
}
private void save(){
String texto = jTextArea.getText();//variable para comparacion
if (texto.matches("[[ ]*[\n]*[\t]]*")) {//compara si en el JTextArea hay
texto sino muestrtra un mensaje en pantalla
JOptionPane.showMessageDialog(null,"No hay texto para guardar!", "Oo
ps! Error", JOptionPane.ERROR_MESSAGE);
}else{
JFileChooser fileChooser = new JFileChooser();
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("todo
s los archivos *.EDU", "edu","EDU"));//filtro para ver solo archivos .edu
int seleccion = fileChooser.showSaveDialog(null);
try{
if (seleccion == JFileChooser.APPROVE_OPTION){//comprueba si ha
presionado el boton de aceptar
File JFC = fileChooser.getSelectedFile();
String PATH = JFC.getAbsolutePath();//obtenemos el path del
archivo a guardar
PrintWriter printwriter = new PrintWriter(JFC);
printwriter.print(jTextArea.getText());//escribe en el archi
vo todo lo que se encuentre en el JTextArea
printwriter.close();//cierra el archivo
//comprobamos si a la hora de guardar obtuvo la extension y

si no se la asignamos
if(!(PATH.endsWith(".edu"))){
File temp = new File(PATH+".edu");
JFC.renameTo(temp);//renombramos el archivo
}
JOptionPane.showMessageDialog(null,"Guardado exitoso!", "Gua
rdado exitoso!", JOptionPane.INFORMATION_MESSAGE);
}
}catch (Exception e){//por alguna excepcion salta un mensaje de erro
r
JOptionPane.showMessageDialog(null,"Error al guardar el archivo!
", "Oops! Error", JOptionPane.ERROR_MESSAGE);
}
}
}
JFileChooser para abrir y/o guardar archivos
JFileChooser es una clase java que nos permite mostrar fcilmente una ventana para
la seleccin de un fichero. En esta oportunidad les dejare un ejemplo de una de l
as muchas formas de como Abrir y Guardar un archivo aplicando filtros tambin que
al momento de guardar genere automticamente la extensin y que evite abrir un archi
vo que ya se encuentra abierto.
La relacin empleada para organizar los casos de uso es la de un extend, ya que se
intenta identificar que cualquiera de estas funcionalidades se pueden o no real
izar tanto individual corno conjuntamente. Adems, hemos relacionado mediante un e
xtend el caso de uso de Gestin de locales y de pisos con el caso de uso Gestin de
edificio. Con esto reflejamos que la gestin de edificios puede conllevar la gestin
de locales, de pisos o de ambos.
En el
s con
po de
as de
?
?
?
?
?

siguiente diagrama (ver Figura 2) se muestran los casos de uso relacionado


el actor inquilino. El inquilino va a ser aquella persona que tiene algn ti
aval, de los expuestos en el enunciado, y, por tanto, puede realizar algun
las siguientes operaciones en el sistema:

Alquilar.
Desalquilar.
Darse de baja.
Modificar sus datos.
Consultarlos.

Para cada una de estas operaciones hay un caso de uso en el diagrama reflejando
la situacin anterior. Adems, ya que se nos dice que para la realizacin de cualquier
a de las operaciones es necesaria su identificacin, se ha reflejado un caso de us
o nombrado Identificacin que se relaciona con los anteriores mediante la relacin d
e include. Con la relacin de include hacemos especial nfasis en esta situacin.
Tras volver a examinar con ms detalle la descripcin proporcionada se observa que c
uando se produce el alquiler ste puede ser el de un piso (Alquiler Piso) un local
(Alquiler Local) y de edificio (Alquiler de Edificio). Por ello se generan tres
nuevos casos de uso que implican una relacin de extend con el caso de uso de Alq
uilar.
Como hemos observado que la primera vez que se produce una operacin de alquiler s
e debe permitir el alta de los datos del inquilino, se ha creado el caso de uso
Alta Inquilino como una extensin de Alquiler Piso, Alquiler Local y Alquiler Edif
icio.
Finalmente, el ltimo diagrama de caso de uso que se muestra (Figura 3) es aquel e
n el que se encuentra involucrado el actor secretario. Tras una visin general de
las caractersticas del sistema, observamos que las tareas del secretario son:

Obtencin de los distintos tipos de recibos. Obtener los informes econmicos. Genera
cin de los listados.
Como vemos, en aras de reflejar de una forma ms meticulosa las funcionalidades qu
e debe contemplar el sistema, todos los casos de uso genricos, con los cuales est
relacionado, se desglosan en otros casos de uso. Para ello se ha utilizado la re
lacin de extensin en algunos casos de uso.
As pues, el caso de uso de "Generar recibos" est relacionado mediante un extend co
n los casos de uso:
? Recibos idnticos mes anterior.
? Inicializar conceptos.
? Modificar los del mes anterior.
Este desglose se ha realizado para reflejar lo que el enunciado muestra con deta
lle y as poder tener una comprensin mayor de lo que el sistema debe de hacer.
Por otra parte, la Gestin de movimientos bancarios se extiende en los casos de us
o de Ingresos y Gastos de inmuebles, mientras que el de ingresos se extiende en
ingresos de pisos e ingresos de local. De esta forma reflejamos el hecho de que
los ingresos pueden ser de pisos, de locales o ambos, pero slo por esos conceptos
.
Figura 3:Casos de uso relacionados con el actor "Secretario empresa".
Finalmente, el caso de uso de Generacin de listados se extiende en distintos caso
s de uso dependiendo del tipo de listado que se ha comentado en el enunciado. Co
n esto se indica claramente cules son especficamente las operaciones que se deben
poder realizar, obteniendo, por tanto, una mayor comprensin de los requisitos que
debe tener el sistema. La extensin refleja esos comportamientos opcionales que p
uede haber en el sistema y que no tienen por qu ser exclusivos, en el sentido de
que si se realiza uno se pueden realizar los otros, cuando se generan listados.
Los casos de uso que tenemos son: Inquilino por fecha, Pagos inquilino en un int
ervalo de tiempo, Impagos inquilino en un intervalo de tiempo, De todos los inmu
ebles, De todos los pisos y locales de cada edificio, De recibos pendientes.