2012-05-10 13 views
6

HTML tiene un modelo de objeto de documento, que Javascript puede manipular/mover.Java GUI: Modelo de objeto de documento

Cuando creo GUI en Swing, el modelo parece ser muy diferente (no sé el nombre del modelo), ya que estoy creando administradores de diseño y pegando objetos dentro de ellos.

Mi pregunta: ¿hay alguna manera de manipular Java GUis de manera similar a DOM?

[Por ejemplo, quiero ser capaz de eliminar/añadir nodos, se mueven alrededor del niño, etc ...]

Gracias!

+0

¿Quieres decir pasar por la jerarquía de componentes? –

+2

Te espera una gran decepción y frustración. Todo es terriblemente más difícil en Swing de lo que estás acostumbrado en Javascript. También descubrirá que no hay captura/burbujeo de eventos: se envía solo al oyente conectado directamente al origen del evento. –

+0

* "(HTML) ..no se conoce el nombre del modelo" * Ver ['HTMLDocument'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/text/ html/HTMLDocument.html) –

Respuesta

7

Para componentes Swing, todo comienza desde un conjunto de JFrame (también puede tener JWindow y JDialog, pero generalmente tiene al menos un marco raíz). Lo más probable es que lo único que te preocupa es el Panel de contenido de ese JFrame (pero también te pueden interesar sus Windows propiedad, etc.).

Así que desde el JFrame, puede obtener el panel de contenido de la siguiente manera:

Container contentPane = frame.getContentPane(); 

A partir de ahí, puede empezar a bajar por el árbol de componentes, usando:

Component[] children = contentPane.getComponents(); 

De un niño , se puede obtener de su padre con:

Container parent = child.getParent(); 

para añadir un componente a un contenedor:

container.add(someComponent); 
container.validate(); 

Para eliminar un componente de un recipiente:

container.remove(someComponent); 
container.validate(); 

Para mover un componente de un recipiente a otro, simplemente eliminarlo de uno y añadirlo a la otra.

No estoy seguro de que esto responda su pregunta. Sería más fácil si pudiera publicar ejemplos reales de lo que está tratando de hacer.

+0

Sugeriría ot use revalidate() + repaint(), en todos los casos, seguro que podría haber discusión sobre lo que JComponent requería y por qué no, solo para evitar que se revalide() + repinta() +1 – mKorbel

+0

Puede obtener una lista con 'Ctrl + Shift + F1', como se muestra [aquí] (http://stackoverflow.com/questions/6671021). –