Foros del Web » Programación para mayores de 30 ;) » Java »

Duda con JTextPane

Estas en el tema de Duda con JTextPane en el foro de Java en Foros del Web. hola a todos, tengo una tremenda duda con JTexpane con componentes internamente, a menor escala lo que estoy haciendo es algo como esto: tengo un ...
  #1 (permalink)  
Antiguo 18/06/2011, 21:50
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 14 años, 10 meses
Puntos: 12
Duda con JTextPane

hola a todos, tengo una tremenda duda con JTexpane con componentes internamente,

a menor escala lo que estoy haciendo es algo como esto:

tengo un JFrame con un JTextPane al cual le voy a insertar un JPanel en tiempo de ejecución,

imagen:
http://imageshack.us/photo/my-images/580/pp1.png/

tengo el JPanel que voy a insertar en el JTexpane:

http://imageshack.us/photo/my-images/716/pp2t.png/


y luego ejecuto el main que se encuentra en el Jframe osea el siguiente código

Código PHP:
public class Principal extends javax.swing.JFrame {

    public 
Principal() {
        
initComponents();
      
JPnl objeto= new JPnl();
        
this.jTextPane1.insertComponent(objeto);
        
objeto=null;
    }

    

    private 
void initComponents() {

      
// acá todo el chorrero de codigo para generar los componentes

    
}


    public static 
void main(String args[]) {
        
java.awt.EventQueue.invokeLater(new Runnable() {

            public 
void run() {
                new 
Principal().setVisible(true);
            }
        });
    }

    private 
javax.swing.JLabel jLabel1;
    private 
javax.swing.JScrollPane jScrollPane1;
    private 
javax.swing.JTextPane jTextPane1;



y el resultado es esto:
http://imageshack.us/photo/my-images/842/pp3d.png/

¿ya que el objeto JPanel lo deje en null y quedo supuestamente sin referencia no se debería eliminar del JTextPane visiblemente?

lo otro que supongo es que el JTexPane queda referenciando el objeto JPanel o a una copia, si esto es asi, como hago para eliminar ese JPanel y los recursos que este ocupa en memoria?

ahora si reemplazo el contenido del JTextPane asi:


Código PHP:
 JPnl objeto2= new JPnl();

        
this.jTextPane1.setText(""); // borro el primer JPanel

        
this.jTextPane1.insertComponent(objeto2);
        
objeto2=null
¿donde queda el primer objeto JPanel?¿se elimina?

ojala alguien allá trabajado con JTextPane de esta manera, y sepa que sucede
es que ya he investigado y no logro dar con la respuestas, y nisiquiera mi profesor de programación sabe darme respuesta que decepcion..

agradezco por adelantado al que me ayude a resolver esta duda...
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-
  #2 (permalink)  
Antiguo 18/06/2011, 22:37
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Duda con JTextPane

Hola:

Cuando un componente cualquiera JTextPane, JPanel o el que sea está dentro de otro, ese otro guarda una referencia al primero, por lo que si la ventana está visible, todos los elementos están referenciados y no se borran solos.

Para eliminar componentes de una ventana o de otro componente (por ejemplo, el JTextPane del JPanel), usa el método remove() del JPanel o de la ventana.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 18/06/2011, 22:50
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Duda con JTextPane

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

Cuando un componente cualquiera JTextPane, JPanel o el que sea está dentro de otro, ese otro guarda una referencia al primero, por lo que si la ventana está visible, todos los elementos están referenciados y no se borran solos.

Para eliminar componentes de una ventana o de otro componente (por ejemplo, el JTextPane del JPanel), usa el método remove() del JPanel o de la ventana.

Se bueno.
hola chuidiang, gracias por contestar, te refieres a que si coloco

objetoJTextPane.removeAll();

en ves de:

objetoJTextPane.setText();

¿si se eliminan los componentes que hallan en el JTextPane?
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-
  #4 (permalink)  
Antiguo 18/06/2011, 22:51
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Duda con JTextPane

Hola,

Cita:
Iniciado por calichecal Ver Mensaje
¿ya que el objeto JPanel lo deje en null y quedo supuestamente sin referencia no se debería eliminar del JTextPane visiblemente?
...
lo otro que supongo es que el JTexPane queda referenciando el objeto JPanel o a una copia, ...
No, porque no eliminaste todas las referencias al objeto, es decir, eliminaste 'tu' referencia al objeto pero el JTextPane todavía tiene una referencia al mismo JPanel y en este caso no es una copia.

Cita:
Iniciado por calichecal Ver Mensaje
si esto es asi, como hago para eliminar ese JPanel y los recursos que este ocupa en memoria?
Mientras el JTextPane tenga la referencia no va a desaparecer de la memoria, pero en el caso del JTextPane puedes imaginarte o compararlo con una imagen insertada en en documento de Word. La forma de eliminar esa imagen en Word es borrándole.

Cita:
Iniciado por calichecal Ver Mensaje
¿donde queda el primer objeto JPanel?¿se elimina?
Código Java:
Ver original
  1. this.jTextPane1.setText(""); // borro el primer JPanel

En ese caso, la máquina virtual de Java por medio del garbage collector se encarga de limpiar la memoria ocupada por el JPanel cuando tenga tiempo o se le venga en gana, puesto que ya no existe ninguna referencia al JPanel, si realmente no hay ninguna referencia.

Saludos,
  #5 (permalink)  
Antiguo 18/06/2011, 22:54
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Duda con JTextPane

Hola,

Me tardé mucho en escribir la respuesta, pero bueno ... agregando algo ....

Cita:
Iniciado por calichecal Ver Mensaje
...
objetoJTextPane.removeAll();
En este caso no funciona así, porque no es un componente manejado por el LayoutManager, es otro tipo de componente especial manejado de otra forma completamente diferente, para formar un 'texto' con cosas insertadas.

Saludos,
  #6 (permalink)  
Antiguo 18/06/2011, 23:13
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Duda con JTextPane

Cita:
Iniciado por HackmanC Ver Mensaje
Hola,

Me tardé mucho en escribir la respuesta, pero bueno ... agregando algo ....



En este caso no funciona así, porque no es un componente manejado por el LayoutManager, es otro tipo de componente especial manejado de otra forma completamente diferente, para formar un 'texto' con cosas insertadas.

Saludos,

osea que estoy haciendo las cosas bien.. bueno por un lado... pero malo por otro... pues el problema de fondo fue un excepcion: java.lang.outofmemoryerror java heap space
que me salio mientras probaba en Windows XP (con 1gb de ram) una aplicación que hice con base de datos embebida "java derby", y pues la aplicación no da problemas en linux ni en windows 7, pero aquel error en XP me dejo con la duda de algún posible problema de gasto desproporcionado de memoria.. ¿sera que fue la bd embebida la que dio problemas en esa prueba?.. toy perdido.. se supone que debió funcionar...
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-
  #7 (permalink)  
Antiguo 18/06/2011, 23:57
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Duda con JTextPane

Hola,



¿Que tiene que ver una cosa con la otra? Bueno, el garbage collector hace su trabajo y el GC de Java es una de las mejores implementaciones que existen. Pero aún así un mal diseño de programación puede permitir 'memory leaks', aunque no son muy frecuentes con Java tanto como en C o C++ también está afecto a eso.

Otra cosa es la 'dependencia' del sistema operativo, aún cuando Java implementa casi todas las operaciones normales siempre va a recaer sobre la implementación del OS. Por ejemplo, para manejar ventanas va a depender de la implementación de Windows XP o GNOME u otros para funcionar, si estos últimos no funcionan exactamente como se espera posiblemente puedan existir problemas de memoria.

Otro caso sería una función recursiva infinita, y muchos otros ejemplos, pero ese tipo de problemas son difíciles de detectar aún con mucha experiencia, y en muchos casos se necesita una revisión exhaustiva al código fuente para saber donde está el problema.

Saludos,

Etiquetas: jtextpane
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:17.