IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Utilisation du PropertyEditor


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 28
    Par défaut Utilisation du PropertyEditor
    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.

  2. #2
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 28
    Par défaut
    Bonjour,

    En fouinant dans la Javadoc, j'ai aperçu la méthode getJavaInitializationString()" (pour la classe PropertyEditor) qui est utilisée lorsqu'on veut faire de la génération de code Java (donc mon cas), elle permet d'initialiser la valeur d'une propriété et elle doit retourner une string.

    Voilà donc comment je l'ai implémenté dans ma classe ShapeEditor :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         public String getJavaInitializationString(){ 
           return ""+myShape; 
          }
    Le code généré dans ma frame ressemble alors à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         shape.setShape(1);
    Donc ça semble marcher... aprés, à voir si c'est vraiment la bonne solution ...
    Qu'en pensez-vous ?

Discussions similaires

  1. Comment utiliser le PropertyEditor
    Par nicolas33400 dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 16/07/2008, 11h19
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo