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

Interfaces Graphiques en Java Discussion :

D�finir une class comme �lement graphique


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre �prouv�
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par d�faut D�finir une class comme �lement graphique
    Bonjour a tous. J'aimerai d�finir une classe comme �l�ment graphique que je pourrai ajouter a un panel(comme un rectangle2D ou line2D etc...) mais je ne sais pas du tout comment faire. J'ai regard� l'architecture de Rectangle2D et j'ai implement� Shape mais cela ne marche pas. Faut - il mettre une m�thode comme paint pour definir la forme du composant? Merci

  2. #2
    R�dacteur/Mod�rateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Ao�t 2005
    Messages
    6 909
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : Nouvelle-Cal�donie

    Informations professionnelles :
    Activit� : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 6 909
    Billets dans le blog
    54
    Par d�faut
    Peux-tu nous montrer du code STP ?
    Merci de penser au tag quand une r�ponse a �t� apport�e � votre question. Aucune r�ponse ne sera donn�e � des messages priv�s portant sur des questions d'ordre technique. Les forums sont l� pour que vous y postiez publiquement vos probl�mes.

    suivez mon blog sur D�veloppez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre �prouv�
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par d�faut
    J'ai creer une classe Unites qui implemente Shape et donc qui reprend toutes ses methodes.Jusque la pas de probleme. Ensuite je creer une classe Soldat qui extends Unites et qui contient une methode paintComponent. Seulement quand dans un Jpanel quelconque je fait un paintComponent et que je fais fill(new Soldat()); rien ne s'affche. J'ai pas de code i�i d�sol� mais en tout cas il n'y a pas d'erreur de compilation. Seuleument je voudrai savoir :
    1 : comment faire en sorte qu'une classe puisse etre utiliser comme tout element graphique(je pense que c'est bon en implementant Shpe mais je ne suis pas sur)
    2: comment ensuite d�finir graphiquement la classe(comment sera t'elle represent� a l'�cran).Merci pour vos aides.

  4. #4
    R�dacteur/Mod�rateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Ao�t 2005
    Messages
    6 909
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : Nouvelle-Cal�donie

    Informations professionnelles :
    Activit� : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 6 909
    Billets dans le blog
    54
    Par d�faut
    Shape definie une forme vectorielle qui est dessinee via le PathIterator qui decrit le chemin entre des point. C'est ce chemin qui doit etre rendu. Si rien ne se dessine, soit ta forme est hors de la zone de vue, soit ton PathIterator ne contient/fait rien

    Perso j'utiliserai plutot la delegation que d'etendre/implementer directement Shape, ca rend les choses plus simple (Shape fait tout le boulot a ta place). Ceci dit mon interface Sprite contient pas mal de methode presentes dans Shape (mais pas toute nottament pas celle retournant le PathIterator) car elles peuvent entre autre aider a la detection des collisions.

    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
    58
    59
    60
     
    public interface class Sprite {
      public boolean contains(int x, int y);
      public Rectangle getBounds();
      ...
      public void draw(Graphics2D graphics);
    }
     
    public abstract class VectorSprite {
      protected Shape delegated;
      protected Paint foreground = Color.WHITE;
      protected Paint background = Color.BLACK;
      protected Stroke stroke = new BasicStroke(1.0f);
     
      /** Creates a new instance.
      */
      public VectorSprite() {
      }
     
     ...
     
      /** @inheritDoc
      */
      @Override public Rectangle getBounds() {
        return delegated.getBounds();
      }
     
      ...
     
      /** @inheritDoc
      */
      @Override public void draw(Graphics2D graphics) {
        if (isFilled()) {
           graphics.setPaint(getBackground());
           graphics.fill(delegated);
        }
        if (isStroked()) {
           graphics.setStroke(getStroke());
           graphics.setPaint(getForeground());
           graphics.draw(delegated);
        }   
      }
    }
     
    public interface Soldier extends Sprite {
    ...
    }
     
    public class VectorSoldier extends VectorSprite implements Soldier {
      /** Creates a new instance.
      */
      public VectorSoldier() {
        GeneralPath path = new GeneralPath();
        // Dessin de la forme ici dans le path.
        delegated = path;
        foreground = Color.GRAY;
        background = Color.GREEN;
      }
      ...
    }
    Tu peux aussi faire que ton soldat soit compose de plusieurs sous-Shape pour avoir plusieurs couleurs (ex le soldat est vert mais tu aimerai que son fusil soit gris fonce). Penser dans ce cas a fusioner les boites englobantes des sous-formes pour former celle du soldat.

    Pour dessiner le path ce n'est pas trop dur il suffit de regarder la doc de GeneralPath et les methode moveTo, lineTo, curvTo, ... sinon on peut utiliser une forme (ou une combinaison de formes) simples de Java2D (Rectangle2D, Arc2D, ...), voir Area si besoin de faire des soustraction entre forme (bref lire un tuto Java2D). Le mieux est de faire des esquisses sur un calepin avec un crayon (hooo low-tech...) avant d'essayer de faire quoique ce soit.

    Note que cette architecture te permet egalement d'utiliser des sprites bitmap en plus de ceux vectoriels, ce qui peut parfois etre interessant une fois que l'on est sur que son jeu marche et qu'on veut faire quelque chose de plus joli.

    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
     
    public abstract class BitmapSprite {
      protected Image image;
     
      /** Creates a new instance.
      * @param Image the image for this sprite.
      * @exception If given image is <code>null</code>
      */
      public BitmapSrite(image image) {
         this.image = image;
       }
     
      ...
     
      /** @inheritDoc
      */
      @Override public Rectangle getBounds() {
        return new Rectangle(0, 0, image.getWidth(null), image.getHeight(null));
      }
     
      ...
     
      /** @inheritDoc
      */
      @Override public void draw(Graphics2D graphics) {
        graphics.drawImage(image, 0, 0, null);
      }
    }
     
    public class BitmapSoldier extends BitmapSprite implements Soldier {
      /** Creates a new instance.
      * @param Image the image for this sprite.
      * @exception If given image is <code>null</code>
      */
      public VectorSoldier(Image image) throws NullPointerException {
        super(image);
      }
     
    ...
    }
    Bien sur c'est une maniere simpliste (nottement les sprites ne sont pas animes) mais c'est un bon debut pour commencer.

    Si c'est pour un jeu regarde du cote de Space Invaders en Java et de leur class Actor (une version anglaise du tuto est sur la droite).

    Note : ensuite un pattern interressant est de creer un ensemble de fabriques pour simplifier un max la maniere dont tu instancie tes objets. (dans mes exemple les differentes flavor sont des enums mais on peut aussi faire avec des identificateur entiers ou des chaines de texte. On peut aussi utiliser des fichiers texte et/ou XML de configuration externe).

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SpriteFactory spriteFactory = SpriteFactory.getInstance(SpriteFactory.Flavor.VECTOR);
    Soldier cannonFodder = spriteFactory.createSoldier(Soldier.Flavor.ARMY);
    Soldier privateRyan = spriteFactory.createSoldier(Soldier.Flavor.ARMY);
    Soldier marine = spriteFactory.createSoldier(Soldier.Flavor.MARINE);
    Soldier pilote = spriteFactory.createSoldier(Soldier.Flavor.AIR_FORCE);
    Soldier snake = spriteFactory.createSoldier(Soldier.Flavor.SPEC_OPS);
    Soldier samFisher = spriteFactory.createSoldier(Soldier.Flavor.SPEC_OPS);
    ...
    Merci de penser au tag quand une r�ponse a �t� apport�e � votre question. Aucune r�ponse ne sera donn�e � des messages priv�s portant sur des questions d'ordre technique. Les forums sont l� pour que vous y postiez publiquement vos probl�mes.

    suivez mon blog sur D�veloppez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. D�finir une Classe triangle
    Par Pingouin22 dans le forum C++
    R�ponses: 13
    Dernier message: 16/10/2007, 10h07
  2. R�ponses: 19
    Dernier message: 14/08/2007, 14h41
  3. R�ponses: 3
    Dernier message: 04/04/2007, 13h17
  4. d�finir une variable comme entier
    Par goldo33 dans le forum MATLAB
    R�ponses: 3
    Dernier message: 26/03/2007, 15h06
  5. D�finir une classe dans une autre classe
    Par acieroid dans le forum C++
    R�ponses: 7
    Dernier message: 21/05/2006, 23h24

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