2010-09-27 6 views
0

J'ai un problème étrange à voir une image JPEG en mettant en œuvre l'interface Java Swing Scrollable. Mon code me permet de dessiner un rectangle sur le dessus de l'image en utilisant le bouton gauche de la souris. Tout fonctionne bien si je ne touche pas les barres de défilement. Mais dès que je fais défiler vers le bas, un rectangle est dessiné à un endroit différent. Fondamentalement, si je déplace la barre de défilement vers le haut, l'image est dessinée avec la mauvaise coordonnée y. Même comportement si vous faites défiler vers la gauche ou la droite, l'image est dessinée avec la mauvaise coordonnée x. Ces coordonnées x, y représentent le point supérieur gauche (x, y) pour commencer à dessiner le rectangle. Donc, après avoir fait défiler vers le bas et fait un clic gauche sur l'image pour dessiner un rectangle, la coordonnée Y est désactivée. Ci-dessous, un événement que j'ai ajouté à l'un des panneaux contenant les images.Swing Scrollable problem

public void mousePressed(MouseEvent m) { 
    if (SwingUtilities.isLeftMouseButton(m)) { 
     .... 
     int y = m.getY(); //This y-coordinate is off whenever I scroll down the image. 
     ... 
    } 
} 

Quelqu'un a des indices sur ce qui pourrait être le problème? Je veux dire que je reçois la coordonnée y à partir de l'événement MouseEvent, donc je m'attendrais à ce qu'il ait la valeur correcte.

Merci.

Répondre

1

Quelles sont les coordonnées que vous attendez? Les valeurs ont du sens pour moi: lorsque vous faites défiler vers le bas, la coordonnée y augmente même si vous cliquez au même endroit sur l'écran.

Le composant qui se trouve dans un panneau de défilement ne connaît rien au panneau de défilement. Ainsi, lorsque le clic se produit, la coordonnée y correspond à l'endroit où le clic aurait été si le composant était assez grand pour être entièrement visible.

Si vous voulez convertir dans le système de coordonnées du scrollpane, vous pourriez faire quelque chose comme cela, je suppose:

public void mouseClicked(MouseEvent e) 
{ 
    Point p = SwingUtilities.convertPoint(label, e.getX(), e.getY(), scrollPane); 
    System.out.println("Converted: " + p.x + ", " + p.y); 
} 

(Edit: Juste une note, le code ci-dessus suppose label est le composant qui affiche l'image)

+0

Comme @Ash, j'obtiens des coordonnées locales à l'image, peu importe la position de défilement; vous pouvez aussi vérifier le dessin de votre rectangle dans paintComponent() '. – trashgod

+0

Non, cela n'a pas fonctionné, mais j'ai ajouté un écouteur à la ScrollBars pour obtenir la valeur chaque fois qu'ils sont déplacés, puis en ajoutant cette valeur au point (x, y) du rectangle dessiné et cela a fonctionné. Merci, tu m'as guidé vers le bon chemin pour y remédier. – Marquinio