En cliquant sur un objet dessiné
J'ai une classe appelée Shape
qui hérite d'un Composite.
Un certain nombre de sous-classes, à son tour prolonger la Shape
classes, une pour chaque type de forme.
Chaque forme a sa propre remplacé paint()
méthode, qui attire l'respectives forme.
Je voudrais être en mesure de cliquer sur n'importe quelle forme, et suis en train de mettre en œuvre cette logique pour l'instant. Veuillez noter que chaque forme a été ajouté à une liste de tableaux.
Toutefois, la mention " contient renvoie toujours false, même si j'ai clairement cliqué à l'intérieur de la forme.
Des idées?
- OK, prévoyez-vous quelque chose comme de la Peinture des formes composant?
- Quel genre de formes? Vous devez mettre en œuvre la
contains
méthode. Il ne va pas générer de lui-même à partir de leur "peindre" la méthode. - Pourriez-vous veuillez élaborer veuillez @JanDvorak? Jusqu'à présent, le programme fonctionne, selon lequel un certain nombre de formes sont dessinées sur l'écran. Mon problème est que je n'arrive pas à cliquer sur les formes.
- un coup d'oeil à MouseListener ou SwingUtilities
- dans votre swift gamme est SSCCE plus d'exigence, ou là, j'ai inutilement de rigolade sur le respect de l'forums habitudes (que de mal), personne ne peut voir le reste de votre code, et potentional answerers simple ignoré cette question (il y a quelques bonnes answeres et être en mesure de répondre à cette question sans y penser),
- Qu'essayez-vous de dire?
- probablement à propos de rien, fopr mieux aider plus tôt afin de modifier votre question avec un SSCCE démontré votre question, ou de recherche sur les Graphiques(Forme / paintComponent) & MouseListener ici
Vous devez vous connecter pour publier un commentaire.
Jamais remplacer
paint()
dansJPanel
plutôtpaintComponent(..)
Je ne suis pas tout à fait sûr, je comprends cependant j'ai fait un court exemple qui je l'espère pourra vous aider.
Fondamentalement, c'est une simple
JFrame
avec unDrawingPanel
(ma propre classe qui s'étendJPanel
et les formes sont dessinées sur). Ce groupe va créer des formes (seulement 2 pour les tests) de les ajouter à unArrayList
et les attirer à laJPanel
viapaintComponent(..)
et unfor
de la boucle, il a aussi unMouseAdapter
pour vérifier les utilisateursmouseClicked(..)
evnets sur leJPanel
. Lorsqu'un clic est effectué, nous itérer sur chaqueShape
dans leArrayList
et de vérifier si leShape
contient le point ou non, et si oui, imprime son nom de la classe et utiliseinstance of
pour vérifier quel type deShape
est cliqué et imprime le message approprié:Sortie (après avoir cliqué sur les deux formes):
ShapeClicker.java:
Si vous êtes à la mise en œuvre de
Shape
vous avez à mettre en œuvre lescontains
méthode vous-même. L'implémentation par défaut pourShape
retourne toujoursfalse
.Si votre
Shape
est délimitée par les courbes que vous savez comment se croisent (ou de déterminer si un point est sur un côté ou de l'autre), vous pouvez utiliser le règle pair-impair. Fonte d'un rayon à partir du point testé dans une direction non parallèle à une ligne droite. Si le nombre d'intersections est impair, le point est à l'intérieur. Si le nombre d'intersections est encore, le point est à l'extérieur.Les classes intégrées mettre en œuvre cette méthode, de sorte que vous pouvez utiliser/étendre le
Polygone
,Ellipse2D.Double
ouRoundRectangle2D.Double
classe et ont rempli un polygone /ellipse /rectangle arrondi qui connaît bien son intérieur.shapeArrayList
? Donc, la méthode que vous avez essayé de travailler si vous de mettre en œuvre lacontains
méthode.