Package memory.chants

Source Code of memory.chants.JDialogGalerie

package memory.chants;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.util.List;

import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingWorker;

import memory.lecteur.LecteurEvent;
import memory.lecteur.LecteurException;
import memory.lecteur.LecteurListener;
import memory.lecteur.LecteurMP3;

/**
* @author patrice
* Une fenêtre de dialogue pour afficher tous les oiseaux. Un clic sur l'un d'eux fait entendre son chant.
*/
public class JDialogGalerie extends JDialog implements LecteurListener
{
  //la galerie d'oiseau est un JPanel
  private JPanel galerie;
  //les oiseaux
  private GestionDonnees gd;
  //le lecteur pour le chant
  private LecteurMP3  lecteur = new LecteurMP3();

  /**
   * constructeur de la JDialog
   * @param fenetre  la fenêtre parent
   * @param titre    le titre de la fenêtre dans la langue choisie
   */
  public JDialogGalerie(Fenetre fenetre, GestionDonnees gd2)
  {
        //construction du JDialog modal
    super(fenetre,gd2.getTxt("titreGalerie",0),true);
    //on ajoute la fenêtre comme listener du lecteur
    this.getLecteur().addLecteurListener(this);
    //quand on ferme la fenêtre il faut que la lecture s'arrête
        this.addWindowListener(new WindowAdapter()
        {
          @Override
          public void windowClosing(WindowEvent e)
          {
                getLecteur().stop();
                dispose();
            }
        });

    //les oiseaux
        setGd (gd2);
        //maximiser la JDialog
        Toolkit kit =  Toolkit.getDefaultToolkit();
       //récupération de la taille de l'écran et des rebords
        Insets insets = kit.getScreenInsets(this.getGraphicsConfiguration());
        Dimension screen = kit.getScreenSize();
        //calcul des longueurs nécessaires et de la position
        int w = (int)(screen.getWidth()-insets.left-insets.right) -20;
        int h = (int)(screen.getHeight()-insets.top-insets.bottom) -20;
        int x = insets.left;    
        int y = insets.top;  
        Dimension dimension = new Dimension(w,h);
        //placement et redimension
        this.setSize(dimension);
        this.setLocation(x,y);
        //la galerie d'oiseaux avec un FlowOut particulier adapté à un JScrollPane
        this.setGalerie (new JPanel(new ModifiedFlowLayout()));
        //son JScrollPane
        getContentPane().add (new JScrollPane(getGalerie(),
              ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
              ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED));
        //ajouter les oiseaux
        creerGalerie();
        //rendre la fenêtre visible
        this.setVisible(true);
  }

  private void creerGalerie()
  {
    SwingWorker sw = new SwingWorker<Void,Oiseau>()
    {

            @Override
            protected Void doInBackground () throws Exception
            {
                for (int i = 0 ; i < getGd().getNbDonnees (); i++)
                {
                    publish(gd.getOiseau(i));
                }
                return null ;
            }
            public void process(List<Oiseau> oiseaux)
            {
                for (final Oiseau oiseau : oiseaux)
                {
                      JLabel lblImage = new JLabel(oiseau.getImage());
                      BordureDouble bordure = new BordureDouble(oiseau.getNom(), oiseau.getNomLatin());
                      //le panneau pour contenir l'image
                      final JPanel panImage = new JPanel();
                      //sa bordure
                      panImage.setBorder (bordure);
                      // on ajoute l'image
                      panImage.add(lblImage);
                      //on ajoute un écouteur de clic
                      panImage.addMouseListener(new MouseAdapter()
                      {
                          @Override
                          public void mouseClicked(MouseEvent e)
                          {
                              try
                              {
                                  //arrêter le lecteur
                                  getLecteur().stop();
                                  //ouvrir le fichier son
                                  getLecteur().open(new File(oiseau.getChant()));
                                  //jouer le son
                                  getLecteur().play();
                                  //le fond du panneau rouge devient gris
                                  for(Component p : getGalerie().getComponents())
                                  {
                                      if (p.getBackground() == Color.RED) p.setBackground(Color.LIGHT_GRAY);
                                  }
                                  //le panneau sur lequel on a cliqué devient rouge      
                                  panImage.setBackground(Color.RED);
                              }
                              catch (LecteurException e1)
                              {
                                          e1.printStackTrace();
                              }
                                     
                          }
                      });
                      getGalerie().add (panImage);
                      panImage.validate ();
                      getGalerie().revalidate ();
                      int x = 0, y = getGalerie().getHeight ()-300, w = getGalerie().getWidth (), h = 300;
                      Rectangle r = new Rectangle(x,y,w,h);
                      getGalerie().scrollRectToVisible (r);
                }
            }
       
    };
    sw.execute ();
  }

  //les procédures liées à LecteurListener
    @Override
    public void opened (Long duree){}

    @Override
    public void progress (Long microseconds){}

    @Override
    public void stateUpdated (LecteurEvent event)
    {       
        if (event.getCode () == LecteurEvent.EOM)
        {
            try
            {
                this.getLecteur().play();
            }
            catch (LecteurException e)
            {
                e.printStackTrace();
            }
        }

        else if (event.getCode () == LecteurEvent.STOPPED)
        {
            for(Component p : getGalerie().getComponents())
            {
                if (p.getBackground() == Color.RED) p.setBackground(Color.LIGHT_GRAY);
            }
        }
    }

    public void setGd (GestionDonnees gd)
    {
        this.gd = gd;
    }

    public GestionDonnees getGd ()
    {
        return gd;
    }

    public void setLecteur (LecteurMP3 lecteur)
    {
        this.lecteur = lecteur;
    }

    public LecteurMP3 getLecteur ()
    {
        return lecteur;
    }

    public void setGalerie (JPanel galerie)
    {
        this.galerie = galerie;
    }

    public JPanel getGalerie ()
    {
        return galerie;
    }
}
TOP

Related Classes of memory.chants.JDialogGalerie

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.