Bonjour,
Dans un JDesktopPane, j'ai plusieurs fenêtres (extends JInternalFrame) que j'ai redéfini par :
- re-écriture de la méthode paint pour donner à ma fenêtre un look totalement différent (fenêtre ronde)
- suppression de la barre de titre (ui.setNorthPane(null))
La suppression de la barre de titre entraine la suppression de la gestion du déplacement de la fenêtre par la souris et j'ai donc voulu re-implémenter celle-ci en ajoutant un addMouseMotionListener et plus précisemment un setLocation dans la méthode mouseDragged(). Mais cette implémentation amène à un comportement bizarre :
- La détection du mouseDragged de la souris est ok => ok
- La fenêtre bouge bien en même temps que la souris => ok
- Le rafraichissement est mauvais et la fenêtre en cours de déplacement apparait successivement entre 2 positions : là où est la souris ou plus en haut à gauche => ko
- plus j'éloigne la fenêtre de sa position d'origine et plus l'écart entre la position de la souris et la position de la fenêtre est différente => ko
Merci d'avance pour votre aide.
Voici mon code (simplifié ci-dessous) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 public class FenetreSceneEtre extends JInternalFrame { public FenetreSceneEtre() { javax.swing.plaf.InternalFrameUI ui = this.getUI(); ((javax.swing.plaf.basic.BasicInternalFrameUI)ui).setNorthPane(null); this.addMouseMotionListener(new MouseMotionListener() { @Override public void mouseDragged(MouseEvent e) { setLocation(e.getPoint()); } @Override public void mouseMoved(MouseEvent e) {} }); } public void paint(Graphics g) { if (g instanceof Graphics2D) { Graphics2D g2d = (Graphics2D) g; // Activation de l'anti-aliasing ! g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); } // ---------------------------------------- // DESSINER LE CERCLE ET SA COULEUR DE FOND // ---------------------------------------- g.setColor(Color.BLACK); g.drawOval(10, 10, 150, 150); g.setColor(Color.BLUE); g.fillOval(10, 10, 150, 150); // ---------------------------------------- // DESSINER LES AUTRES COMPOSANTS // ---------------------------------------- if(this.panel!=null) this.panel.paintComponents(g); } }







Répondre avec citation



Partager