Je travaille sur une interface graphique où les composants JComponents sont "estampillés" sur l'écran. En d'autres termes, les composants réels ne sont pas affichés, mais les images des composants. Il s'agit d'un graphique dans lequel les nœuds du graphique sont des composants Swing personnalisés, ou plutôt des images estampées des composants Swing.Can findComponentAt() peut-il fonctionner avant qu'un composant JComponent ne soit peint?
Maintenant, je veux afficher des info-bulles pour des composants spécifiques dans mes nœuds. Pour ce faire, je crée un composant JComponent identique à celui affiché et en utilisant les valeurs x et y de la souris, je demande à findComponentAt() pour le composant approprié. Cela ne fonctionne pas très bien. Si je réutilise JComponents pour les noeuds, il devient confus si j'essaie d'obtenir une info-bulle pour un noeud de taille différente de la dernière peinte. Si je crée un nouveau composant JComponent pour chaque nœud et un nouveau lors du calcul de l'info-bulle, la taille initiale du nouveau est 0,0. Je peux définir la taille en utilisant le calcul getPreferredSize(), mais cela ne fonctionne toujours pas. La racine JComponent (un JPanel) a la bonne taille, mais aucun de ses enfants n'a encore de taille.
Un échantillon du code de calcul de infobulle:
// Get a component that matches the stamped component
JComponent nodeComponent = getNodeComponent();
// These next two lines get the size right
nodeComponent.setSize(nodeComponent.getPreferredSize());
nodeComponent.revalidate();
Component componentTop = nodeComponent.findComponentAt(relativeX, relativeY);
componentTop revient comme la racine JComponent peu importe valeurs x et y il est passé.
Est-il possible de faire en sorte que Swing calcule correctement la taille et l'emplacement des composants JComponents sans les peindre?
Le problème n'est pas de trouver le bon noeud. Je l'ai. Le problème consiste à obtenir le composant enfant dans le nœud. Je veux des info-bulles différentes dans le même nœud, selon que la souris est sur une étiquette ou une image. –