2009-10-08 9 views
0

que je dois faire une carte d'image à l'aide swing qui affiche une image d'arrière-plan, puis lorsque la souris passe au-dessus (ou clics) points d'accès spécifiques, j'ai besoin pour faire apparaître une image « zoomée » et l'ont afficher.Comment créer une carte d'image en utilisant Java Swing?

Je pensais à étendre JPanel d'inclure une référence d'image et qui ai tracé à travers la méthode paintComponent (g). Cette partie, je l'ai fait jusqu'à présent, et voici le code:

public class ImagePanel extends JPanel 
{ 
    private static final long serialVersionUID = 1L; 

    private Image image; 

    public ImagePanel(Image image) 
    { 
     setImage(image); 
    } 

    public void setImage(Image newImage) 
    { 
     image = newImage; 
    } 

    @Override 
    public void paintComponent(Graphics g) 
    { 
     Dimension size = getSize(); 
     g.drawImage(image, 0, 0, size.width, size.height, this); 
    } 

Quelqu'un pourrait-il recommander comment je pourrais écouter/répondre aux clics de souris sur les points chauds définis? Quelqu'un pourrait-il également recommander une méthode pour afficher les pop-ups? Mon intuition était d'étendre JPopupMenu pour qu'il affiche une image, similaire au code ci-dessus.

Merci pour toute aide!

Répondre

2

Pour écouter les clics de souris implémenter l'interface MouseListener, et l'ajouter à votre panneau. Ensuite, lorsque le clic est reçu, vous pouvez utiliser un JPopupMenu comme vous le suggérez, ou vous pouvez même utiliser un volet en verre pour afficher l'image agrandie.

Je suppose que vous voulez réaliser quelque chose de similaire à ce post par Joshua Marinacci, il a également posté la source here, je voudrais jeter un oeil à cela.

+0

Cool, merci! – Cuga

2

je ne serais probablement:

  • créer une instance de forme qui représente chacun de vos points chauds (pourrait être une plaine ennuyeuse rectangle ou voir GeneralPath si vous avez besoin pour créer des formes de fantaisie)
  • un registre MouseListener qui itère à travers chacune des Formes et appelle sa méthode contains() pour voir si la coordonnée cliquée est à l'intérieur du hotspot en question
+0

Je voudrais faire ceci, mais quelque chose que je n'ai pas mentionné est que les hotspots peuvent être arbitraires dans une image. Donc, un moyen de contourner cela pourrait être de superposer les sous-images, mais je ne suis pas sûr si je veux faire cela. – Cuga