¿Es posible obtener el nombre del panel al que se agrega un JLabel? Agregué algunos JLabels a diferentes JPanels, y quiero llamar a diferentes eventos de mouse según el panel sobre el que se coloquen las jLabels.JLabel - obtener el panel principal?
Respuesta
Si ejecuta label.getParent()
devolverá el panel donde está la etiqueta.
A continuación, puede llamar al parent.getName()
, pero el hecho de que ahora tendrá el objeto que quizás no necesite ahora.
La forma más sencilla de hacer esto:
//label1 and label2 are JLabel's
//panel1 and panel2 are JPanel's
doActionsForLabel(label1);
doActionsForLabel(label2);
public void doActionsForLabel(JLabel label)
{
if (label.getParent() == panel1)
{
//do action #1
}
else if (label.getParent() == panel2)
{
//do action #2
}
}
El código anterior supone que las etiquetas son hijos directos de los JPanels. Sin embargo, este no siempre es el caso, a veces son bisnietos o tataranietos del panel. Si este es el caso, tendrá que realizar algunas operaciones un poco más complejas para atravesar la jerarquía principal.
public void doActionsForLabel(JLabel label)
{
boolean flag = true;
Component parent = label;
while (flag)
{
parent = parent.getParent();
if ((parent != null) && (parent instanceof JPanel))
{
if (label.getParent() == panel1)
{
//do action #1
}
else if (label.getParent() == panel2)
{
//do action #2
}
}
else
{
flag = false;
}
}
}
Como Gordon ha sugerido, si no desea comprobar la igualdad de los componentes, se puede comprobar la igualdad de las propiedades de los componentes:
En lugar de label.getParent() == panel1
, hacer esto o similar en vez : label.getParent().getName().equals("panel_1_name")
.
Si usted no sabe cómo el fondo de la etiqueta está en la jerarquía, hay algunas funciones útiles en SwingUtilities
, por ejemplo: SwingUtilities.getAncestorOfClass(Class, Component)
Una alternativa a la verificación del nombre del contenedor primario en las etiquetas podría ser simplemente reenviar el evento al contenedor primario y dejar que el padre haga el trabajo. Dependiendo de lo que intente lograr, podría ser útil desacoplar las etiquetas de los padres. Los eventos de reenvío se pueden hacer usando Component. processEvent (AWTEvent)
.
Y 'public static Contain getAncestorNamed (String name, Component comp)', si conocemos el nombre. ¡Gracias! – FaithReaper
- 1. JLabel encima de otra JLabel
- 2. JLabel pinta puntos
- 3. XAML: Obtener el fondo principal
- 4. JLabel images array
- 5. setAlignmentY no centrado JLabel en BorderLayout
- 6. ¿Cómo obtener el URL principal en Java?
- 7. Obtener el formulario principal del componente
- 8. ¿Cómo obtener el nodo principal en Capibara?
- 9. Obtener el encabezado ELF del ejecutable principal
- 10. Obtener función principal
- 11. Vuelva a pintar en el marco/panel/componente translúcido.
- 12. Obtener la posición de los dedos en el panel táctil
- 13. Cómo cambiar un JLabel dinámicamente
- 14. cómo guardar el panel como imagen en el columpio?
- 15. Colocación del componente en el panel de vidrio
- 16. El texto html de JLabel ignora setFont
- 17. ¿Cómo cambiar el icono de un JLabel?
- 18. JLabel al cambiar el evento de texto
- 19. Java Animate JLabel
- 20. Mostrar BMP en JLabel
- 21. ¿Existe algún JLabel MultiLine?
- 22. Girar un Swing JLabel
- 23. arrastrando un jlabel alrededor de la pantalla
- 24. Java agregando ImageIcon a JLabel
- 25. ¿Por qué JLabel no muestra '/' cuando es el primer caracter?
- 26. Newline en JLabel
- 27. Evento Swing-calling desde el panel interior
- 28. ¿Cómo ocultar el panel principal y mostrar una imagen en toda la página?
- 29. La alineación vertical de JLabel no funciona como se esperaba
- 30. Cómo agregar un hipervínculo en JLabel
gracias que fue muy útil :) – Kari
de nada ... – bguiz