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.
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?
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.
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
.
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.
- ici pour savoir comment utiliser la vitre.
- Jan Newmarch page web sur l'utilisation de ressources était très utile.
- Kevin Riff's réponse m'a aidé à trouver comment trouver mes ressources.
Ouf. Ça ne vaut que 2 jours pour boire. Je commence enfin à m'habituer à Java :)
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.
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é.
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;
}
}
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;
}