Bonjour,
J'ai un petit problème pour faire de l'édition de propriétés d'un javabean. Pour vous exposer mon problème, je me suis créé un petit javabean qui s'appelle Shape et qui est un composant dont on peut spécifier la couleur et la forme (ovale ou ronde).
Voilà le code de la classe Shape :
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 public class Shape extends javax.swing.JComponent { protected java.awt.Color myColor; public void setColor(Color theColor) { Color old=myColor; myColor = theColor; repaint(); } public Color getColor() { return myColor; } public final static int OVALE = 1; public final static int RECTANGLE = 2; protected int myShape; public void setShape(int theShape) { int old=myShape; myShape = (theShape == OVALE || theShape == RECTANGLE) ? theShape : OVALE; repaint(); } public int getShape() { return myShape; } public void paint(Graphics g) { Color oldColor = g.getColor(); g.setColor(myColor); switch (myShape) { case OVALE: g.fillOval(0, 0, getWidth(), getHeight()); break; case RECTANGLE: g.fillRect(0, 0, getWidth(), getHeight()); break; default: g.fillOval(0, 0, getWidth(), getHeight()); } g.setColor(oldColor); } public Shape() { this(Shape.OVALE, Color.white); } public Shape(int theShape, Color theColor) { super(); setShape(theShape); setColor(theColor); } }
Pour exposer correctement les propriétés, je me suis écrit un bean info tout simple :
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 public class ShapeBeanInfo extends SimpleBeanInfo { public BeanDescriptor getBeanDescriptor() { BeanDescriptor bdesc = new BeanDescriptor(Shape.class); bdesc.setDisplayName ("Shape"); return bdesc; } public PropertyDescriptor[] getPropertyDescriptors() { try { PropertyDescriptor pdesc1 = new PropertyDescriptor("color", Shape.class); PropertyDescriptor pdesc2 = new PropertyDescriptor("shape", Shape.class); pdesc2.setPropertyEditorClass(ShapeEditor.class); PropertyDescriptor[] pdesc = {pdesc1, pdesc2}; return pdesc; } catch (IntrospectionException ex) { Logger.getLogger(ShapeBeanInfo.class.getName()).log(Level.SEVERE, null, ex); return null; } } }
Et enfin je me suis créé un PropertyEditorSupport afin de pouvoir éditer la forme de l'objet sous une forme de combo box (choix entre "ovale" et "rectangle").
Voilà le code de la classe ShapeEditor
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 public class ShapeEditor extends PropertyEditorSupport { protected int myShape; public void setValue(Object obj) { myShape = ((Integer) obj).intValue(); } public Object getValue() { return new Integer(myShape); } public String[] getTags() { String[] str = { "ovale", "rectangle" }; return str; } public String getAsText() { switch (myShape) { case 1: return "ovale"; case 2: return "rectangle"; default: return "ovale"; } } public void setAsText(String str) { if (str.equals("rectangle")) { myShape = 2; } else { myShape = 1; } } }
Une fois que j'ai mis mon composant sur une JFrame, je peut modifier sa forme, on la voit bien changer.
Le problème c'est que si je regarde le code généré par le plugin Visual Editor que j'utilise pour faire de l'IHM sous Eclipse; il me génère le code suivant (pour la méthode qui me permet de créer mon composant Shape) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 private Shape getShape() { if (shape == null) { shape = new Shape(); shape.setBounds(new Rectangle(15, 15, 115, 61)); shape.setShape(???); } return shape; }
Donc j'ai l'impression que ma sélection de la forme n'est pas comprise ou alors que Visual Editor l'interprète mal, je ne sais pas trop ....
Pensez-vous que ma classe ShapeEditor soit correct ? Voyez vous la solution ?
Merci d'avance pour les réponses que vous pourrez m'apporter.
Partager