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

Eclipse Platform Discussion :

Comment utiliser le PropertyEditor


Sujet :

Eclipse Platform

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 Comment utiliser le PropertyEditor
    Bonjour,

    Tout d'abord je tiens à m'excuser pour ce doublon, j'ai déjà posé ma question dans une autre rubrique mais n'ayant pas eu de réponse, je me suis dit que je n'étais peut être pas dans la bonne catégorie (si c'est encore le cas, merci de me le faire savoir).

    Voici mon problème.
    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;
    	}

    Il n'y a donc aucune chance pour que ce code fonctionne à l'éxécution à cause des ces points d'interrogation !
    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 ....
    J'ai aussi essayé avec Netbeans et le résultat est le même. Je tiens aussi à préciser que si je vire complètement ces strings (ovale et rectangle) et que je dis par exemple que l'entier 1 correspond à ovale et 2 à rectangle alors ça marche trés bien. Mais sélectionner 1 ou 2 dans une combo box au lieu de ovale ou rectangle, ça revient pas tout à fait au même niveau compréhension par l'utilisateur :-D.


    Pensez-vous que ma classe ShapeEditor soit correct ? Voyez vous la solution ?


    Merci d'avance pour toutes 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 Auto réponse : peut être une solution
    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. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  2. Comment utiliser un cache ?
    Par TOM-Z dans le forum XMLRAD
    Réponses: 4
    Dernier message: 14/03/2003, 09h55
  3. comment utiliser actionscript ?
    Par webs dans le forum Flash
    Réponses: 3
    Dernier message: 09/02/2003, 23h11
  4. Comment utiliser OUT ?
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 20/07/2002, 09h35
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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