Qu'est-ce que java?awt.Composant.getName() et setName () utilisés pour?

qu'est-Ce que java.awt.Component.getName() est-il utilisé? Il semble être toujours null dans les applications que je construis avec NetBeans. Je pense à stocker du texte d'aide par composant -- Je ne veux pas utiliser le tooltip, j'ai un autre panneau où je vais montrer le texte d'aide.

20
demandé sur palacsint 2008-10-22 23:06:05

9 réponses

Composant.setName(..) est utilisé dans le JDK principalement par les classes d'implémentation look and feel pour définir des chaînes ID-like pour chaque composant, par exemple BasicOptionPaneUI pourrait l'appeler sur un composant bouton pour définir son nom à "OptionPane.bouton."

getName () est utilisé dans les méthodes toString (), lors de la définition des noms de composants enfants à l'intérieur D'un composant Composite/parent et dans le code de débogage AWT et Swing debug. Je soupçonne fortement que la méthode getName() est également utilisé par certains Cadres D'essai AWT/Swing.

donc si vous n'êtes pas dépendant de l'une des utilisations ci-dessus de getName(), vous pouvez essayer de l'utiliser pour vos messages d'aide, bien que je ne le recommande pas.

peut-être devriez-vous reconsidérer votre conception? Utilisez le nom pour faire une recherche dans une hashmap qui charge le texte d'aide d'un paquet de ressources?

20
répondu Herman Lintvelt 2008-10-22 19:55:45

Je ne l'ai pas vu utilisé pour quoi que ce soit par le cadre. C'est utile si vous avez des composants passés dans une méthode pour que vous puissiez demander leur nom pour décider comment les manipuler. En outre, de nombreux cadres de test de L'UI utilisent ceci pour vous permettre de vous référer aux composants par leur nom dans les scripts de test. Je ne vois pas pourquoi vous ne pouvez pas l'utiliser pour le texte d'aide cependant.

6
répondu AdamC 2008-10-22 19:11:55

FEST utilise le nom d'un composant pour l'identifier dans les testcases.

2
répondu Simulant 2012-09-04 14:28:26

component.getName() méthode est surtout utilisée avec les auditeurs. Si vous définissez le nom d'un composant (component.setName(name)) vous pouvez appeler ce composant spécifique à partir d'une méthode de Listener.

Exemple:

public void someMethodOfsomeListener(SomeEvent e){
   if (e.getComponent().getName().equals(component.getName())
      //do stuff...
}

soyez conscient que vous devez définir explicitement le nom du composant, sinon il retournera null.

2
répondu palacsint 2015-03-31 11:49:29

la réponse de Herman Lintvelt a fini par être la bonne pour mon application.

j'ai créé un ensemble de ressources appelé HelpText.propriété. Il contient des paires nom=valeur. Je setName()d chacun de mes Composants avec le "nom" de la paire nom=valeur. J'ai ensuite utilisé le getglasspane() du Cadre pour capturer tous les mouvements de la souris. Quand une souris court sur un composant nommé, elle regarde le nom dans le faisceau, affiche l'aide si disponible et transmet le mouvement de la souris à le long à la réelle Composant.

Ouf. Ça ne vaut que 2 jours pour boire. Je commence enfin à m'habituer à Java :)

1
répondu JohnnyLambada 2008-10-22 21:55:31

aussi, puisque je pense à java.awt.Component est un objet lourd dans X, les programmes comme xwininfo et xwd peuvent vous permettre de le spécifier par son nom.

j'ai juste essayé avec un JFrame, et setName n'a pas défini le nom de la fenêtre, la fenêtre a été nommée par la chaîne que j'ai passée dans le constructeur. Mais je n'ai pas de code d'exemple awt-only à tester, donc je pourrais me tromper sur ce que j'ai écrit ci-dessus.

0
répondu Paul Tomblin 2008-10-22 19:32:30

Je l'utilise pour gérer les écouteurs dans une seule classe à part. Je reçois comme paramètre le composant qui contient mon objet.addListener pas comme un conteneur, mais comme la classe qui contient l'objet. Merci Vivavinyl pour la pointe de mettre le nom en premier. Il a été utile et a travaillé.

0
répondu 2009-07-26 22:24:34

C'est ce que j'utilise getName ():

    Frame[] frames = JFrame.getFrames();

    for (int i = 0; i < frames.length; ++i) {

        //get the frame
        Frame frame = frames[i];

        if (frame.getName().equals(frameName)) {

            //make the frame visible
            frame.setVisible(true);

            //focus the frame
            frame.requestFocus();

            //found
            return;

        }

    }
0
répondu 2009-09-24 00:43:18

j'ai cherché beaucoup de réponses pour obtenir le nom et je pense que c'est la seule solution facile

public static void main(String[] args) {
    ActionListener actionListener = new ActionListener() {
        public void actionPerformed(ActionEvent actionEvent) {
            String name = actionEvent.getSource().toString();
            UserReaction(ObjectName.getComponentVariableName(name), "null");
        }
    };
    Button calculate_btn = new Button("Calculate");
    calculate_btn.setName("Calculate");
    calculate_btn.addActionListener(actionListener);
}

private static void UserReaction(String objectName) {
    if (objectName.equals("Calculate")) {
        //do something;         
    }
}static public String getComponentVariableName(String name) {
    String res = (name.substring(name.indexOf("[") + 1));
    res = res.split(",")[0];
    return res;
}
-1
répondu Tural 2017-03-22 16:05:06