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 :

[débutant] java2D centrer dans un JCompoment


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut [débutant] java2D centrer dans un JCompoment
    bonjour, j'ai une qestion de débutant

    comment centrer un rectagne java2D dans un JComponent?
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    @SuppressWarnings("serial")
    public class SlipComponent2D extends JComponent{
    	private static final float MARGIN = 40;//Marge en centimètre autour du repère du plan
    	private float              scale = 0.5f;//Echelle par défaut
     
    	public SlipComponent2D(Slip slip){
     
    	}
     
    	  /**
               * Dessine un composant
               */
    	  @Override
    	  protected void paintComponent(Graphics g) {
    		  //Création d'une copie du contexte graphique
    	    Graphics2D g2D = (Graphics2D)g.create();
    	    //dessin du fond
    	    paintBackground(g2D);
    	    //Dessin du cadre
    	    paintFrame(g2D);   
    	    //libération des ressources associées à l'objet Graphics2D
    	    g2D.dispose();
    	  }
     
    	  /**
               * dessine le fond du composant s'il est opaque
               */
    	  private void paintBackground(Graphics2D g2D) {
    	    if (isOpaque()) {
    	      //Récupération de la couleur de fond d'une fenêtre
    	      //dans le Look and feel
    	      Color backgroundColor = UIManager.getColor("window");
    	      //remplissage du composant avec de la couleur de fond
    	      g2D.setColor(backgroundColor);
    	      g2D.fillRect(0, 0, getWidth(), getHeight());
    	    }
    	  }
    	  /**
               * dessine le cadre
               */
    	  private void paintFrame(Graphics2D g2D) {
     
    		  //couleur du rectangle
    		  g2D.setColor(Color.WHITE);
    		  //dessine un rectangle
    		  g2D.fillRect((getPreferredSize().width/2),(getPreferredSize().height/2),80,80);
    	  }
     
    	  /**
               * Renvoie la taille préférée du composant
               */
    	  @Override
    	  public Dimension getPreferredSize() {
    	    if (isPreferredSizeSet()) {
    	    	//si la taille a été positionné avec setPreferedSize
    	    	//renvoyer cette taille
    	      return super.getPreferredSize();
    	      //sinon, calcul des dimensions préférées en tenant
    	      //compte de la bordure du composant, de la marge MARGIN
    	      // et du rectangle englobant tous les traits
    	    } else {
    	      Insets insets = getInsets();
    	      return new Dimension(
    	          Math.round(( MARGIN * 2)* this.scale) + insets.left + insets.right,
    	          Math.round(( MARGIN * 2)* this.scale) + insets.top + insets.bottom);
    	    }
    	  }
     
    }
    merci pour votre aide

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    À lire ton code j'ai l'impression que tu programmes déjà bien et ne comprends pas ce qui te bloque... Tu prends les dimensions du conteneur, leur retirant celles de ton rectangle, divisant par deux, ajoutant ou retirant la moitié, et c'est centré.

    Que se passe-t-il ?

  3. #3
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut
    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	  private void paintFrame(Graphics2D g2D) {  
    		  //couleur du rectangle
    		  g2D.setColor(Color.WHITE);
    		  int widthRect = 500;
    		  int heightRect = 200;
    		  //dessine un rectangle
    		  g2D.fillRect(((this.getPreferredSize().width- widthRect)/2),((getPreferredSize().height-heightRect)/2),widthRect,heightRect);
    		  //g2D.fillRect(10,10,500,200);
    	  }
    mais mon rectancgle n'est pas centré

  4. #4
    Membre éclairé Avatar de puybaret
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 61
    Par défaut
    Pourquoi utilises-tu la taille préférée du composant dans tes calculs ?
    Utilise plutôt getSize...

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bon petite amélioration de ton code vite fait

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    
    @SuppressWarnings("serial")
    public class SlipComponent2D extends JComponent{
    	private static final float MARGIN = 40;//Marge en centimètre autour du repère du plan
    	private float              scale = 0.5f;//Echelle par défaut
    	
    	public SlipComponent2D(Slip slip){
    		
    	}
    	
    	  /**
    	   * Dessine un composant
    	   */
    	  @Override
    	  protected void paintComponent(Graphics g) {
    		  //Création d'une copie du contexte graphique
    	    Graphics2D g2D = (Graphics2D)g; //(pas besoin du create)
                //Pour être sur que ton panel est bien visible sinon possibilité de NPE
                if(this.isShowing()) {
    	       //dessin du fond
    	       paintBackground(g2D);
    	       //Dessin du cadre
    	       paintFrame(g2D);   
    	       //libération des ressources associées à l'objet Graphics2D
    	       g2D.dispose();
                }
    	  }
    	
    	  /**
    	   * dessine le fond du composant s'il est opaque
    	   */
    	  private void paintBackground(Graphics2D g2D) {
    	    if (isOpaque()) {
    	      //Récupération de la couleur de fond d'une fenêtre
    	      //dans le Look and feel
    	      Color backgroundColor = UIManager.getColor("window");
    	      //remplissage du composant avec de la couleur de fond
    	      g2D.setColor(backgroundColor);
    	      g2D.fillRect(0, 0, getWidth(), getHeight());
    	    }
    	  }
    	  /**
    	   * dessine le cadre
    	   */
    	  private void paintFrame(Graphics2D g2D) {
      
    		  //couleur du rectangle
    		  g2D.setColor(Color.WHITE);
    		  //dessine un rectangle
                      if(this.getWidth()>MARGIN*2 && 
    this.getHeidth()>MARGIN*2) {
    		     g2D.fillRect(MARGIN,MARGIN,getWidth()-MARGIN,getHeight()-MARGIN);
                      }
    	  }
    	  
    	  /**
    	   * Renvoie la taille préférée du composant
    	   */
    	  @Override
    	  public Dimension getPreferredSize() {
    	    if (isPreferredSizeSet()) {
    	    	//si la taille a été positionné avec setPreferedSize
    	    	//renvoyer cette taille
    	      return super.getPreferredSize();
    	      //sinon, calcul des dimensions préférées en tenant
    	      //compte de la bordure du composant, de la marge MARGIN
    	      // et du rectangle englobant tous les traits
    	    } else {
    	      Insets insets = getInsets();
    	      return new Dimension(
    	          Math.round(( MARGIN * 2)* this.scale) + insets.left + insets.right,
    	          Math.round(( MARGIN * 2)* this.scale) + insets.top + insets.bottom);
    	    }
    	  }
    	  
    }

Discussions similaires

  1. [Débutant] Du C dans le C++
    Par flzox dans le forum MFC
    Réponses: 3
    Dernier message: 28/06/2005, 18h38
  2. [Débutant][JFileChooser] Ecrire dans fichier
    Par Clark dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 16/05/2005, 17h47
  3. [débutant][java2D]améliorer le design
    Par pingoui dans le forum 2D
    Réponses: 13
    Dernier message: 29/11/2004, 10h06
  4. [débutant] java2D pour arbre généalogique
    Par pingoui dans le forum 2D
    Réponses: 4
    Dernier message: 16/11/2004, 13h30
  5. Réponses: 8
    Dernier message: 05/05/2004, 16h28

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