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