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);
	    }
	  }
	  
} | 
Partager