Package memory.chants

Source Code of memory.chants.Oiseau

package memory.chants;

import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
* une classe qui permet de de définir un oiseau par son nom, son chant, son apparence ...
* Cette classe est un Jpanel ce qui permet de l'afficher directement.
* L'image est mise à l'échelle, la bordure de l'image est définie.
* Toute réflexion faite ce n'est pas bien de mélanger la donnée (ce qu'est l'oiseau) et sa
* représentation graphique (comment s'affiche l'oiseau). D'ailleurs en fait je n'utilise jamais
* directement la représentatioon graphique de l'oiseau.
* @author Patrice
**/
public class Oiseau
{
  //le nom de l'oiseau
  private String nom;
  //le fichier MP3 du chant
  private String chant;
  //l'image de l'oiseau à la bonne dimension
  private ImageIcon image;
  //la taille de l'image
  private int taille;
  //pour mesurer la dimension d'une chaîne
  private static FontMetrics fm;
  //le nom latin
  private String nomLatin;
 
  /**
   * Constructeur
   * @param nom              le nom de l'oiseau
   * @param fichierSon       le fichier du chant de l'oiseau (mp3)
   * @param fichierImage     le fichier de l'image de l'oiseau (jpg)
   * @param tailleImage     la taille de l'image par défaut
   */
  public Oiseau(String nom, String nomLatin, String fichierSon, String fichierImage, int tailleImage)
  {
    initFontMetrics();
      //les données
    this.chant = fichierSon;
      this.nom = nom;
      this.nomLatin = nomLatin;
      //la taille de l'image
      this.taille = tailleImage;
      //l'image
        setImage(fichierImage);
  }
 
  private static void initFontMetrics()
  {
    if (fm == null)
    {
      Font policeTitre = new Font("Dialog",Font.BOLD,12);
      fm = new JLabel().getFontMetrics(policeTitre);
    }
  }

  /**
   * Constructeur sans taille image : taille par défaut = 300
   * @param nom              le nom de l'oiseau
   * @param latin         le nom latin 
   * @param fichierSon       le fichier du chant de l'oiseau (mp3)
   * @param fichierImage     le fichier de l'image de l'oiseau (jpg)
   */
  public Oiseau(String nom, String latin, String fichierSon, String fichierImage)
  {
    this(nom,latin,fichierSon,fichierImage,300);
  }

  /**
   * modifier le nom de l'oiseau (changement de langue)
   * @param name le nouveau nom
   */
  public void changeNom(String name)
  {
    this.nom = name;
  }
 
  //l'image à partir du fichier
  private void setImage(String fichier)
  {
        //l'image avec sa taille originelle
      ImageIcon image1 = new ImageIcon(fichier) ;
      //ses dimensions
        int largeur = image1.getIconWidth ();
        int hauteur = image1.getIconHeight ();
        //la taille préférée du plus grand côté           
        int largeurImage = this.taille;
        if (largeur > hauteur)
        {
            hauteur = (hauteur * largeurImage)/largeur;
            largeur = largeurImage ;
        }
        else
        {
            largeur = (largeur * largeurImage)/hauteur;
            hauteur = largeurImage;
        }
       
        //il faut aussi que le nom tienne dans la largeur
      int largeurNom = fm.stringWidth (this.nom) + 20;
      int largeurNomLatin = fm.stringWidth(this.nomLatin) + 20;
      largeurNom = Math.max (largeurNom, largeurNomLatin);
      largeur = Math.max (largeurNom, largeur);
        this.image =  new ImageIcon(image1.getImage().getScaledInstance(largeur,hauteur,Image.SCALE_DEFAULT));
  }

  /**
   * @return le chant de l'oiseau
   */
  public String getChant()
  {
    return this.chant;
  }

  /**
   * @return l'image
   */
  public ImageIcon getImage()
  {
    return this.image;
  }

  /**
   * @return le nom
   */
  public String getNom()
  {
    return this.nom;
  }
 
  /**
   * return le nom latin
   */
  public String getNomLatin()
  {
    return "(" + this.nomLatin + ")";
  }
 
  public static void main(String[] args)
  {
    final GestionDonnees gd = new GestionDonnees();
    final Oiseau oiseau = gd.getOiseau((int) (35*Math.random ()));
    final JPanel panneau = new JPanel();
    final JLabel label = new JLabel();
    panneau.addMouseListener(new MouseListener()
    {

      @Override
      public void mouseClicked(MouseEvent e)
      {
        if (e.isPopupTrigger()) System.out.println("clic droit");
      }

      @Override
      public void mousePressed(MouseEvent e) {}

      @Override
      public void mouseReleased(MouseEvent e) {}

      @Override
      public void mouseEntered(MouseEvent e) {}

      @Override
      public void mouseExited(MouseEvent e) {}
     
    });

      javax.swing.SwingUtilities.invokeLater(new Runnable()
        {
      public void run()
            {
        JFrame fenetre = new JFrame("Test du composant oiseau");
        label.setIcon(oiseau.getImage());
        panneau.add(label);
        fenetre.add(panneau);
        fenetre.pack();
        fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenetre.setLocationRelativeTo(null);
        fenetre.setVisible(true);
            }
        });
  }
}
TOP

Related Classes of memory.chants.Oiseau

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.