Java - Objetos

   
Vista:

Objetos

Publicado por Blay (6 intervenciones) el 23/10/2008 01:19:22
Hola!! mirad tengo un problema y unas preguntas xD aver si alguno me puede ayudar

Estoy creando un programa en el que tengo un Objeto llamado proyecto, que es donde guardo toda la informacion necesaria para el proyecto del usuario.
hasta ahi bien. cuando creo nuevos internal frames cn los distintos menus y formularios, puedo pasarle como parametro el objeto proyecto pero nose como hacer para poder hacer modificaciones en el objeto y que se mantengan una vez que ese internalFrame se cierre. mirad en ejemplillo

*/
public class vAbrirPro extends javax.swing.JPanel {
private JFrame prin;
proyecto pro;
/** Creates new form vAbrir */
public vAbrirPro(proyecto a_pro, JFrame principal) {
initComponents();
prin = principal;
pro=a_pro;
this.setVisible(true);
//prin.setEnabled(false);
}

BtAbrir es el boton que pulsa el usuario para que se cargen los datos dsd el fichero.

private void BtAbrirActionPerformed(java.awt.event.ActionEvent evt) {
try{
String nombre= TxProyecto.getText().trim();
proyecto aux=new proyecto();
pro=Hash.cargarPro(prin,nombre);
Hash.altaProyecto(pro);
prin.setTitle("BOC: proyecto "+nombre);

}catch(Exception e){System.out.println("fallo");}

// TODO add your handling code here:
}
asigno el fichero leido a pro, el problema esta cuando esta vetana es cerrada y el objeto que guarde en pro no puedo utilizarlo.
Existe alguna forma (duda para los que me hayan entendido :) )de hacer esto que to quiero?
O existe kiza alguna forma de en lugar d declarar un atributo del tipo proyecto, pueda trabajar directamente desde el atributo a_pro??

muchas gracias de antemano :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Objetos

Publicado por Mario (199 intervenciones) el 23/10/2008 10:31:11
Creo que te interesa que los atributos de la clase Proyecto sean estáticos y, posiblemente, los métodos también.
Al declarar un atributo como estático, todos los objetos instanciados de esa clase, tendrán el mismo valor.
Por ejemplo, yo muchas veces me creo una clase llamada Errors, que contiene un ArrayList donde voy añadiendo los mensajes de error que me interesan que queden reflejados al terminar la ejecución de la aplicación. En esa clase, el ArrayList es estático, y el método addError también.
De esa forma, puedo llamar a esa clase desde cualquier otra clase que me interese sin tener que crear un nuevo objeto, y con la ventaja de que mientras la aplicación esté en funcionamiento, la lista de errores (ArrayList) será siempre la misma, se llame desde donde se llame a la clase Errors.
No sé si me habré explicado bien... si tienes alguna duda me lo dices ;·)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objetos

Publicado por Blay (6 intervenciones) el 23/10/2008 12:26:01
interesante cuestion, no abia pensado en ello :) Muchas gracias, voy a hacer una pruebas!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objetos

Publicado por Mario (199 intervenciones) el 23/10/2008 13:51:07
Si lo solucionas coméntanoslo para saber qué solución escogiste, para que esto pueda ayudar si alguien lo necesita de nuevo más adelante ;·)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objetos

Publicado por Blay (6 intervenciones) el 23/10/2008 14:21:58
Hola otra vez! he estado probando. POner el atributo como estatico no me vale. mirad explico otra vez.

yo tengo mi JFrame principal y de ahi voy crear mis internal frames o JDialog a lo largo del programa. Estos internal los instancio asi:

vFlexSimple v= new vFlexSimple(this,pro);
JInternalFrame internal = new JInternalFrame("Flexion simple");
internal.add(v);
internal.pack();
PnDesk.add(internal);
internal.setClosable(true);

internal.show();

va? como se ve, cuando instancio el JPanel vFlexSimple() veis que le paso this (mi frame principal) y pro (el objeto proyecto). Bien pues en flexionSimple simplemente se encuentran unas pestañas en las que se podra trabajar con los datos del proyecto.
el tema esta en que cuando recivo como paremetro pro,no puedo utilizar ese mismo, realizar modificaciones y que se mantengan. Pues la unica forma de usarlo es declaracion del estilo a esta: pro=a_pro;

public class vFlexSimple extends javax.swing.JPanel {
private proyecto pro;
/** Creates new form vFlexSimple */
public vFlexSimple(JFrame prin,proyecto a_pro) {
pro=a_pro;
initComponents();
Pestaña.add("Acero", new vPFSAcero(pro));
}

public class vPFSAcero extends javax.swing.JPanel {
private proyecto pro;
/** Creates new form vPFSAcero */
public vPFSAcero(proyecto a_pro) {
initComponents();
pro=a_pro;
cargarDatos();

}

Esto es para que veais como se van creando las ventanas y seguir el hilo. Bien pues llegado a este punto el metodo cargarDatos e spara leer de un fichero en donde sta guardado un objeto proyecto (Que es el que quiero leer y que reemplaze al que este en pro).

mi problema creo que es xk cada vez que entro en una ventana creo un nuevo atributo que es donde se copia el a_pro. pero esq no se otra forma de trabajar cn ello, xk el a_pro no me deja utilizarlo. y si ya fuera del contructor, se hace click a un boton que "actualice" pro no me deja modificar a_pro, sino que solo puedo utlizar pro :)

enfin este es mi problema y nose cual sera la posible solucion, he pensado tambien en emplear tablas hash..pero enfin, tal y como tengo planteado el programa practicamente solo se trabaja con un objeto general, en el que se encuentran todos los datos, ...y nose, una tabla hash para un solo elemento nose si es del todo correcto.

Quiza no me eplique con claridad, pero mi nivel universitario no da para mas (he aprobado todas las asignaturas de java y aora me doy cuenta k nos explicaron entre nada y menos)
gracias otra vez XD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objetos

Publicado por Mario (199 intervenciones) el 24/10/2008 10:44:57
Mmmm, a ver... según creo, tu objetivo se podría llevar a cabo poniendo los atributos como estáticos, tal y como te indiqué en mi primera respuesta, pero ya comienzo a tener algunas dudas. Está claro que ver el proyecto "desde fuera" es un pelín complicado para comprenderlo completamente.

Los atributos que yo te comentaba que deberías poner estáticos son los atributos de la clase Proyecto, no el objeto de la clase Proyecto contenidos en el Frame. Es decir, si tienes un atributo llamado nombreProyecto, ese atributo deberías ponerlo estático. te olvidarías de pasar el parámetro en las InternalFrames o cualquier otro Frame, simplemente instanciarías otro objeto proyecto, y sin inicializar nada, el nombre del proyecto ya debería tener el valor cargado en el Frame principal. Y por supuesto, también debería poder actualizarse. No sé si lo habrás hecho así, te lo he explicado un poco más x si no lo hice bien la primera vez. Si quieres, pegame el código donde declaras los atributos de forma estática, para ver si es coherente con mi idea.

Sino, se me ocurre otra forma, aunque más "cutre" y fea a mi parecer. Ya que en los Frames secundarios tendrás una referencia al Frame principal (al pasarle this en el constructor), puedes crear en ese Frame principal un método que sea getProyecto. Desde los Frames secundarios, podrías hacer esto: framePadre.getProyecto().setNombreProyecto("prueba");

Y en un caso extremo en el que eso no funcionase del todo bien, podrías crear en el frame principal métodos que llamen directamente a métodos de su objeto Proyecto, es decir... framePrincipal.setNombreProyecto("prueba") Y ese método llamaría al setNombreProyecto del objeto Proyecto.

A ver si lo logras de alguna de esas formas. Yo creo que con la primera solución que te di debes poder realizarlo, así que si tienes dudas sobre cómo hacerlo me lo dices ;·)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objetos

Publicado por Blay (6 intervenciones) el 03/11/2008 01:29:51
tarde en contestar. veamos expongo mi solucion implantada y con la que llevo trabajndo una semanilla

mi problema era pasar la informacion de una ventana a otra, en otras palabras, trabajar con mi objeto proycto en cualquier ventana que se fuese creando.

bien, pues decidi utilizar una tabla hash. En ella solo hay un objeto, mi querido objeto proyecto. cada vez que creo un frame o dialog en el que necesite acceder a la informacion de mi objeto o bien sus metodos, lo que hago es: pasar como parametro el nombre del proyecto(con este nombre me refiero al nombre que tiene en la tabla hash para poder acceder a el), recoger el proyecto de la tabla hash, lo utilizo y si veo que existen modificaciones pues simplemente actualizo el objeto de la tabla y listo :)

Esta opcion me parecio la mas correcta, en lugar de estar pasando un objeto(un objeto con mucha informacion) a traves de las ventanas simplemente paso un string. Creo que de este modo habra menos complejidad, me a simplificado notablemente la programacion estos dias :)
aora bien, no se si para la maquina es mas complejo estar obteniendo objetos de una tabla hash o ir pasando continuamente el objeto por todas las interfaces.

Espero haber expresado correctamente mi solucion y se pueda entender con relativa claridad :)
PD: aunq no haya dicho nada, prove lo que me dijisteis. Mañana lo repasare de nuevo para deciros mis resultados con esas pruebas. Aora es domingo y he currado mucho jaja no tengo ganas

ale gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar