Guardar mi diagrama con implements Serializable

Estuve investigando como usar la interface Serializable para poder guardar mi diagrama interactivo pero hasta ahora no puedo obtener resultados favorables.
Quisiera que me guarde mi diagrama, y al momento de abrirlo que me aparezca cada objeto con su conector en el mismo lugar, creo que eso se haría en la clase Lienzo pero no se como empezar. Espero me des consejos como poder:
Pasos fundamentales:
1. Ya tengo el diagrama interactivo, en un jPanel. Almacenados en un Vector cada objeto.
2. Deseo guardarlo en un archivo, con una extensión cualquiera.

1 Respuesta

Respuesta
1
Primero debes implementar la clase Serializable en todas las clases que contendrá el Vector.
Te voy a mandar un ejemplo modificado para tu caso de un programa que estoy creando:
public void guardaDiagrama (String f) throws IOException{
        FileOutputStream fos = new FileOutputStream (f+".eme");
        ObjectOutputStream salida = new ObjectOutputStream (fos);
        salida.writeObject (componentes);
        salida.close();
    }
Cuando esto te haya creado un archivo me avisas para decirte como cargarlo.
Hola amigo, gracias por responderme... Ahora mi duda es la siguiente, quisiera saber como llamar el método guardaDiagrama (que esta en la clase Lienzo) desde mi jFrame, del button guardar (jB_Save).
private void jB_SaveActionPerformed(java.awt.event.ActionEvent evt) {
        //areaDibujo.guardaDiagrama(null);
    }
Ayudame en esa parte amigo, no se como seria, gracias.
String s1 = "";
            while (s1 == null || s1.trim().isEmpty()) s1 = JOptionPane.showInputDialog("Ingresa el nombre del DFD");
areaDibujo.guardaDiagrama(s1);
Esa es una manera, si usas un JFileChooser tendrías que darle el valor a s1 del nombre del archivo deseado.
Además, puede cambiar donde dice .eme por otra extensión que quieras como .dfd.
Hola amigo, disculpa... Como podría usar el FileChooser, porque me pidieron que yo busque una ruta al archivo que deseo guardar. Por favor ayudame en la manera de usar FileChooser.
 Si me ejecuto bien el codigo amigo, le agregue en try catch y salio.
String s1 = "";
            while (s1 == null || s1.trim().isEmpty()) s1 = JOptionPane.showInputDialog("Ingresa el nombre del DFD");
        try {
            areaDibujo.guardaDiagrama(s1);
        } catch (IOException ex)
            {}
Ayudame por favor, como poder ponerle FileChooser. Gracias.
Amigo, en algunos ejemplos pude ver que cuando guardan, les sale una pantalla parecida a como sale en el windows cuando ruteamos para guardar un archivo, con la misma apariencia de las carpetas en color amarillo, en cambio cuando yo use el FileChooser en un ejemplo me sale azul. Como podría trabajarlo con amarillo. Gracias
Pues ya sabes que sé muchas cosas pero otras no tanto así que busqué por un rato encontré una muy buena solución.
Antes de mostrar el diálogo escribes:
try {
        UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName() );} catch (Exception e) {}
Esto lo que hace es que pide que se aplique el User Interface del Sistema Operativo.
Gracias amigo por lo de guardar... Me podrías ayudar ahora como poder abrir el diagrama. Por favor.
public void cargaDiagrama (String f) throws IOException{
        FileInputStream fos = new FileOutputStream (f+".dfd");
        ObjectInputStream entrada = new ObjectInputStream (fos);
        Vector<ObjetoDibujable> entrada.readObject ();
        entrada.close();
        componentes = nuevos;
    }
Ahí le cambié la extensión
Hola amigo, me salio error en las lineas:
Vector<ObjetoDibujable> entrada.readObject();
componentes = nuevos;
¿De dónde saco la variable nuevos amigo?
Amigo disculpa, en guardar si ejecuto bien, ya que me dijiste que ponga:
salida.writeObject(componentes);
Pero en abrir puse: Vector<ObjetoDibujable> entrada.readObject(); y me sale error.
Vector<ObjetoDibujable> nuevos = (Vector<ObjetoDibujable>)  entrada.readObject ();
Hola amigo, gracias por responder. Así quedo el metod cargadiagrama en mi clase Lienzo
public void cargaDiagrama (String ruta, String f) throws IOException, ClassNotFoundException{
        FileInputStream fos = new FileInputStream (f+".dfd");
        ObjectInputStream entrada = new ObjectInputStream (fos);
        Vector<ObjetoDibujable> nuevos = (Vector<ObjetoDibujable>)  entrada.readObject ();
        entrada.close();
        componentes = nuevos;
    }
Amigo, podrias ayudarme ahora como lo llamaria desde mi button Abrir, a este metodo?
private void jB_OpenActionPerformed(java.awt.event.ActionEvent evt) {                                        
       .....................
    }
Gracias.
Mmm bueno estuve leyendo un poco y analizando y llegué a esta conclusión.
Debes de modificar un poco el código ya que deberás usar el JFileChooser.
private void jB_OpenActionPerformed(java.awt.event.ActionEvent evt) {                                        
JFileChooser fileChooser = new JFileChooser();
int seleccion = fileChooser.showOpenDialog(this); // o intenta con otro component
if (seleccion == JFileChooser.APPROVE_OPTION)
{
   File fichero = fileChooser.getSelectedFile();
   cargaDiagrama (fichero);
}
    }
Y el otro quedaría así:
public void cargaDiagrama (File f) throws IOException, ClassNotFoundException{
        FileInputStream fos = new FileInputStream (f);
        ObjectInputStream entrada = new ObjectInputStream (fos);
        Vector<ObjetoDibujable> nuevos = (Vector<ObjetoDibujable>)  entrada.readObject ();
        entrada.close();
        componentes = nuevos;
    }
Doy créditos a Chuidiang.
http://www.chuidiang.com/java/novatos/editor/leer_escribir_fichero.php
Además trata de modificar para salvar el archivo, visita esa página.
Hola amigo, disculpa en esta parte de mi button Abrir me sale error:
cargaDiagrama(fichero);
Aquí adjunto una foto para que me puedas ayudar:
Gracias.
¿XD Cambiaste el método como te dije? (El otro)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas