Bonjour à tous,
Je débute avec java et là je sèche un peu. Je souhaite faire un logiciel qui ressemblerait à paint. J'ai donc fait une interface Shape qui représente une forme comme une ligne, un carré... Ensuite, dès que je veux ajouter une nouvelle forme, j'implémente Shape dans Line par exemple. Line contient aussi une classe static LineFactory qui implémente ShapeFactory. Ceci sert à pouvoir cliquer sur l'icône "ligne" qui mettrait la factory courante du programme à "LineFactory". Ainsi, quand je dessinerais quelque chose à l'écran, la factory courante me fabriquera une ligne (et non un carré ou autre). La principale difficulté vient du fait que j'aimerais n'avoir qu'à implémenter Shape et ShapeFactory pour créer une nouvelle forme et que ce ne soit pas au main de rajouter toutes les formes possibles mais bien les formes qui se rajoutent elles-mêmes.
Je fais donc pour Square par exemple :
Or le code static n'est pas exécuté, apparemment car je ne me suis jamais servi de cette classe mais c'est bien ça le problème, je ne veux pas que le reste du code appelle cette classe car il n'est même pas censé la connaître. Et donc, comment faire pour qu'il s'execute ?
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 public class Square extends FourCornerShape { private Rectangle2D m_square; private Square(int x, int y, long level) { super(x, y, level); m_square = new Rectangle2D.Float(x, y, cornerSize, cornerSize); } //quelques fonctions //about factory //ici, je fais la factory public static class SquareFactory extends ShapeFactory{ //un peu de code encore //ici je propose de construire un carré public Shape createShape(int x, int y, long level) { return new Square(x, y, level); } } //ici je me fais une factory "de classe" private static final Square.SquareFactory square_factory = new Square.SquareFactory(); //là je fais un bouton qui aura comme image une ligne et quand on cliquera dessus, il dira au programme d'utiliser la factory square_factory private static final ShapeFactoryButton button = new ShapeFactoryButton(square_factory, image_prefix + "EmptySquare.jpeg"); //et là, j'aimerais bien qu'il s'ajoute tout seul ! static{ SharedDrawingUI.getInstance().addShapeButton(button); } }
J'ai essayé avec les classeLoader, je m'en suis fait un qui permet de "résolver" la classe mais il ne lève aucune exception ni n'exécute le code :
et dans le main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class Loader extends ClassLoader{ public void load(String pathName) { try { loadClass(pathName, true); } catch (ClassNotFoundException ex) { Logger.getLogger(Loader.class.getName()).log(Level.SEVERE, null, ex); } } }
Mais le code static du carré ne s'éxecute toujours pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Loader loader = new Loader(); loader.load("Square");
Une idée ?
Merci beaucoup !
Partager