2009-10-03 110 views

Respuesta

7

La respuesta corta es sí, como JLabel es una Container, por lo que puede aceptar una Component (un JLabel es una subclase de Component) añadir a la JLabel utilizando el add método:

JLabel outsideLabel = new JLabel("Hello"); 
JLabel insideLabel = new JLabel("World"); 
outsideLabel.add(insideLabel); 

En el código anterior, se agrega insideLabel al outsideLabel.

Sin embargo, visualmente aparece una etiqueta con el texto "Hola", por lo que realmente no se puede ver la etiqueta que está dentro de la etiqueta.

Por lo tanto, la pregunta es qué se quiere lograr al agregar una etiqueta encima de otra etiqueta.


Editar:

De los comentarios:

bien, lo que quería hacer era primero, leer una cierta fracción de un archivo, a continuación, mostrar que la fracción de un jlabel. lo que pensé fue en dividir la fracción en 3 partes, luego usar una etiqueta para cada una de las tres. luego segundo, quiero poder arrastrar la fracción, así que pensé que podría usar otra jlabel, y colocar 3'mini jlabels 'sobre la etiqueta grande. no sé si esto funcionará aunque ..: |

Parece que hay que ver cómo usar los administradores de diseño en Java.

Un buen lugar para comenzar sería Using Layout Managers y A Visual Guide to Layout Managers, ambos de The Java Tutorials.

Parece que GridLayout podría ser una opción para realizar la tarea.

JPanel p = new JPanel(new GridLayout(0, 1)); 
p.add(new JLabel("One")); 
p.add(new JLabel("Two")); 
p.add(new JLabel("Three")); 

En el ejemplo anterior, el JPanel está hecho de utilizar un GridLayout como el controlador de distribución, y se le dice que hacer una fila de JLabel s.

+0

oh. ¡Genial, gracias! No estoy realmente familiarizado con estos, así que pregunté aquí. :) – annaoj

+0

bueno, lo que quería hacer era primero, leer una cierta fracción de un archivo, luego mostrar esa fracción en un jlabel. lo que pensé fue dividir la fracción en 3 partes, luego usar una etiqueta para cada una de las tres. luego, en segundo lugar, quiero poder arrastrar la fracción, así que pensé que podría usar otra jlabel, y colocar las 3'mini jlabels 'sobre la gran jlabel. no sé si esto funcionará ...: | – annaoj

+0

suena como que esto va a funcionar ... gracias, ¡amigo! :) – annaoj

0

es una cuestión de diseño. puede hacerlo usando el diseño nulo (con ubicaciones codificadas) o con un diseño personalizado.

+0

He estado tratando de hacer esto, pero no funciona para mí. : c tal vez estoy haciendo algo mal. Intentaré de nuevo. gracias Omry! – annaoj

+0

puede usar la función list() para obtener un buen volcado de la jerarquía de contenedores actual, lo que le ayudará a depurar su problema. –

+0

¡genial! ¡Gracias! si encuentro problemas nuevamente, ¿puedo publicarlo aquí nuevamente? – annaoj

1

La respuesta a su pregunta original es sí por los motivos, dado que cualquier Componente se puede agregar a un Contenedor.

La razón por la que no ve la segunda etiqueta es porque, de forma predeterminada, un JLabel utiliza un administrador de diseño nulo y el tamaño de la segunda etiqueta es (0, 0) por lo que no hay nada que pintar. Entonces, todo lo que tiene que hacer es establecer los límites de la segunda etiqueta y listo.

No puede usar un administrador de disposición si desea arrastrar componentes porque, tan pronto como cambie el tamaño del marco, se invocará el administrador de disposición y los componentes se reposicionarán en función del administrador de disposición del componente.

+0

oh. pero ¿es posible tener una etiqueta encima de otra y ser capaz de arrastrar ambas etiquetas como una sola? : | – annaoj

+0

Si el detector de mouse se agrega a la etiqueta principal, todos los elementos secundarios también se arrastrarán cuando se mueva. – camickr

+0

oh..pero un amigo dijo que no es posible ... dijo que debería usar un panel. wah. ahora estoy perdido. : | – annaoj

0

puede usar un JLayeredPane y establecer su borde en Sin borde.

+0

Disculpa, ¡es una manera fácil si usas un diseñador! Como el de Netbeans. –

0

puede agregar ponerlos por encima de los demás mediante el uso de la brecha horizontal o vertical (hgap, Vgap) los atributos del diseño
JPanel p = new JPanel(new GridLayout(2, 1,-40,0)); //the 40 is the hgap , make it the same with the label height .