Bonjour,
Je me suis récemment mis en tête de faire une sorte de Paint en Swing, à la base pour travailler la détection de contours, le remplissage de surface fermée etc, mais finalement c'est un problème bien différent que je rencontre. En effet, quand je déplace la souris très lentement en mode tracé, ça trace niquel mais si je vais à peine plus vite les points commencent à s'espacer, et c'est encore bien pire quand j'accélère le rythme.
Actuellement, voici ce que fait ma méthode mouseDragged (elle appelle simplement la méthode suivante) :
Je suis en train de me demander si je ne devrais pas en réalité stocker le précédent Point pPrev sur lequel a été appelé la méthode, puis de tracer la totalité des points du segment [pPrev, p]. Bien sûr il faudrait dans ce cas utiliser un booléen modifié par mouseReleased histoire de ne pas faire ça sur deux drag'n'drop consécutifs différents. Est-ce que je suis sur la bonne voie d'après vous, ou y a-t-il mieux à faire ? J'ai utilisé des Shape au début mais ça n'était pas vraiment dans l'intention de tracer des courbes, c'était juste pour essayer un peu le dessin dans Swing, et je trouve que ça n'est pas très adapté, dois-je m'en débarrasser ?
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 private void paintPencil(Point p) { pencilHeight = pencilSize.getValue(); pencilWidth = pencilSize.getValue(); Color color = pencilColorVar; Shape shape = null; if(pencilShape.getSelectedItem().equals("Rond")) shape = new Ellipse2D.Float(p.x,p.y,pencilWidth,pencilHeight); else if(pencilShape.getSelectedItem().equals("Carré")) shape = new Rectangle(p.x,p.y,pencilWidth,pencilHeight); if (shape != null) shapes.add(new Couple<Color,Shape>(color,shape)); repaint(); }
Partager