9
votes

Jlabel - Obtenez un panneau parent?

est-il possible d'obtenir le nom du panneau qu'un jlabel est ajouté? J'ai ajouté des jlabels à différents jpanels et je veux appeler des événements de souris différents selon quel panneau sont placés sur les Jlabels.


0 commentaires

3 Réponses :


11
votes

Si vous exécutez label.geparent () Il retournera le panneau que l'étiquette est à l'intérieur.

Vous pouvez alors appeler parent.getname () mais le fait que vous aurez maintenant l'objet que vous n'ayez peut-être pas besoin de cela maintenant.


0 commentaires

4
votes

Le moyen le plus simple de le faire:

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;
        }
    }
}


0 commentaires

3
votes

Si vous ne savez pas à quel point votre étiquette est au fond de la hiérarchie, il existe des fonctions utiles dans oscillants , par exemple: oscillabilité.getanCestorofclass (classe, composant )

Une alternative à la vérification du nom du conteneur parent de vos étiquettes pourrait simplement transmettre l'événement au conteneur parent et laissez le parent faire le travail. Selon ce que vous essayez de réaliser, il pourrait être utile de découpler les étiquettes des parents. Les événements de transmission peuvent être effectués en utilisant composant. ProcurentEvent (AWTEvent) .


1 commentaires

Et Conteneur Static Public GetCetornommé (nom de chaîne, composant Comp) , si nous connaissons le nom. Merci!