Badorapar Stéphane Clerc UPMF - Grenoble - IUT II 2003 |
Glossaire
Bibliographie - Webographie
Annexes
Annexe 1 : Description des classes Java
Classe qui comporte les attributs propres à un événement et possède une fonction de recherche d'un événement dans un des fichiers de la base à partir d'une date donnée.
Cette classe qui n'est pas encore achevée est un panneau où sera affiché une animation radar. Elle implémente l'interface "Runnable" c'est-à-dire qu'elle peut utiliser des "threads". Badora.java import javax. swing.*; import j avax. swing. event. *; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import java.text.*; // +++++++++++++++++++++++++ // ++ Classe Interface ++ // +++++++++++++++++++++++++ class Interface extends JFrame implements ActionListener { 77 Attributs privés private JImage jim; private JMenuBar barreMenus = new JMenuBar(); private JMenuItem enrImage, quitter, apropos; private JToolBar barreOutils = new JToolBar(); private JButton ok = new JButton("OK"); private JButton enreg = new JButton (new ImageIcon ("disquette.gif")); private JButton precedent = new JButton (new ImageIcon ("left.gif")); private JButton suivant = new JButton (new ImageIcon ("right.gif")); private JButton anim = new JButton (new ImageIcon ("anim.gif")); private JComboBox saisons = new JComboBox(); private JLabel choix = new JLabel ("Saison : "); private JPanel contenu; private listEv listev; private short saisonEnCours; 77 ************************ 77 * Méthodes publiques * 77 ************************ 77 77 public Interface () { // Fenêtre d'ouverture dialogDeb fenDeb = new dialogDeb (this); modifSaisonEnCours (fenDeb. saison ()); // Initialisation de la fenêtre principale setBounds (20, 20, 800, 600); setTitle(" --== B A D O R A ==-- "); setDefaultCloseOperation (JFrame.EXIT _ON _CLOSE); contenu = (JPanel)getContentPane(); contenu.setLayout (new BorderLayout ()); // Barre de menus setJMenuBar (barreMenus); JMenu mFichier = new JMenu ("Fichier"); barreMenus.add (mFichier); JMenuItem enrImage = new JMenuItem ("Enregistrer image"); JMenuItem quitter = new JMenuItem ("Quitter"); mFichier.add (enrImage); mFichier.add (quitter); enrImage.addActionListener (this); quitter.addActionListener (this); JMenu mAide = new JMenu ("Aide"); barreMenus.add (mAide); JMenuItem apropos = new JMenuItem ("A propos de"); mAide.add (apropos); apropos.addActionListener (this); // Barres d'outils barreOutils.add (enreg); enreg.addActionListener (this); barreOutils.add (precedent); precedent.addActionListener (this); barreOutils.add (suivant); suivant.addActionListener (this); barreOutils.add (anim); anim.addActionListener (this); // Panneaux JPanel nord = new JPanel (new FlowLayout(FlowLayout.LEFT)); nord.add (choix); nord.add(saisons); nord.add (ok); nord.add (barreOutils); String[] sais = { "Saison 1990", "Saison 1991", "Saison 1992", "Saison 1993" }; for (int i=0; i < 4; i++) saisons.addItem(sais[ i]); ok.addActionListener (this); switch (saisonEnCours) { case 1991 : saisons.setSelectedIndex(1); jim = new JImage(7, 6, saisonEnCours, 6, 50, 2); break; case 1992 : saisons.setSelectedIndex(2); jim = new JImage(20, 6, saisonEnCours, 4, 20, 35); break; case 1993 : saisons.setSelectedIndex(3); jim = new JImage(6, 6, saisonEnCours, 2, 50, 50); break; default : saisons.setSelectedIndex(0); jim = new JImage(8, 6, saisonEnCours, 0, 7, 40); } jim.setPreferredSize (new Dimension(100, 100)); listev = new listEv (this, saisonEnCours); contenu.add ("North", nord); contenu.add ("West", listev); contenu.add("Center", jim); } // fin Constructeur // // public void update (JImage jimage) { // met à jour l 'image à afficher contenu.remove (jim); jim = jimage; jim.setPreferredSize (new Dimension(100, 100)); contenu.add ("Center", jim); contenu . repaint (); } public void actionPerformed (ActionEvent ev) { if (ev.getSource() == ok) { // Modification de la saison en cours choisie Object annee = saisons.getSelectedItem(); if ((String) annee == "Saison 1990") modifSaisonEnCours((short)1990); else if ((String) annee == "Saison 1991") else if ((String) annee == "Saison 1992") modifSaisonEnCours((short)1992); else if ((String) annee == "Saison 1993")
modifSaisonEnCours((short)1993); listev = new listEv (this, saisonEnCours); contenu.add ("West", listev); setVisible (true); } else if (ev.getSource() == precedent) { if (listev.listim().getSelectedIndex() != 0) { // recule d'une image et met à jour l'interface ImageRadar im = new ImageRadar(); im = jim.image().getImagePrec(); jim = new JImage (im); update (jim); listev. reculListim(); } } else if (ev.getSource() == suivant) { // avance d'une image et met à jour l'interface if (listev.listim().getSelectedIndex() != (listev.listim() .getItemCount()-1)) { ImageRadar im = new ImageRadar(); im = jim.image().getImageSuiv(); contenu . remove (this. jim); jim = null; jim = new JImage (im); if (jim.imRadar() == null) System.out.println("null imrad"); listev. avanceListim(); update (jim); } } else if (ev.getSource() == anim) { // création d'une animation pour un événement Object dat = listev.listev() .getSelectedItem(); String d = (String) dat; int jour = Integer.parseInt (d.charAt(0) + "" + d.charAt(1)); int mois = Integer.parseInt (d.charAt(3) + "" + d.charAt(4)); int annee = Integer.parseInt (d.charAt(6) + "" + d.charAt(7) + "" + d.charAt(8) + "" + d.charAt(9)); int heure = Integer.parseInt (d.charAt(11) + "" + d.charAt(12)); int min = Integer.parseInt (d.charAt(14) + "" + d.charAt(15)); int sec = Integer.parseInt (d.charAt(17) + "" + d.charAt(18)); Evenement evt = new Evenement(); evt = evt.getEvenement (jour, mois, annee, heure, min, sec); Anim anim = new Anim (this, evt); } // gestion des événements liés aux menus if (ev.getSource()instanceof JMenuItem |ev.getSource() == enreg) { String ChoixOption = ev.getActionCommand(); if (ChoixOption.equals("Quitter")) { dispose(); // destruction de la fenêtre
principale } else if (ChoixOption.equals("Enregistrer image") || ev.getSource() == enreg) { FileDialog fenEnr = new FileDialog (this, "Enregistrer image", FileDialog. SAVE); fenEnr.setFile(".png"); fenEnr.show(); String nomFich = fenEnr.getFile(); if(nomFich!=null) { File fichier=new File(fenEnr.getDirectory()+nomFich); jim. saveImage (fichier); } } else if (ChoixOption.equals("A propos de")) { JOptionPane.showMessageDialog (this, "A propos de Badora\n\n Auteur : Stéphane Clerc\n. .2003", "A propos de B A D O R A", JOptionPane. INFORMATION _MESSAGE); } } } public void modifSaisonEnCours (short annee) { saisonEnCours = annee; System.out.println("New saison : " + saisonEnCours); } } // fin Classe Interface // ++++++++++++++++++++++++ // ++ Classe dialogDeb ++ // ++++++++++++++++++++++++ class dialogDeb extends JDialog implements ActionListener { private short saison; JButton sais90 = new JButton ("Saison 1990"); JButton sais91 = new JButton ("Saison 1991"); JButton sais92 = new JButton ("Saison 1992"); JButton sais93 = new JButton ("Saison 1993"); private JLabel choix = new JLabel ("Choisissez une saison : "); private Toolkit kit = Toolkit.getDefaultToolkit(); private Image logoLthe = kit.getImage ("logo _lthe.gif"); private Image logoIrd = kit.getImage ("logo _ird.gif"); private Image logoCatch = kit.getImage ("logo _catch.gif"); private Image logoAmma = kit.getImage ("logo _amma.gif"); private LogoLthe panLthe = new LogoLthe (); private LogoIRD panIRD = new LogoIRD(); private LogoCatch panCatch = new LogoCatch(); private LogoAmma panAmma = new LogoAmma(); // ********************** // * Méthodes publiques * // ********************** // // public dialogDeb (JFrame parent) { // configuration de la fenêtre et des différents panneaux super (parent, "Bienvenue sur BADORA", true); setBounds (300, 300, 500, 330); JPanel contenu = (JPanel) getContentPane(); contenu . setLayout (new BorderLayout ()); contenu.setBackground (new Color (255, 218, 185)); JPanel center = new JPanel(); center.setBackground (new Color (255, 218, 185)); panLthe.setPreferredSize (new Dimension(116, 107)); panIRD.setPreferredSize (new Dimension(120, 100)); panCatch.setPreferredSize (new Dimension(100, 100)); panAmma.setPreferredSize (new Dimension(100, 100)); GridBagLayout grille = new GridBagLayout(); GridBagConstraints constraints = new GridBagConstraints(); center. setLayout (grille); buildConstraints (constraints, 0, 0, 1, 1, 20, 20); grille.setConstraints (choix, constraints); buildConstraints (constraints, 0, 1, 1, 1, 20, 20); grille.setConstraints (sais90, constraints); buildConstraints (constraints, 0, 2, 1, 1, 20, 20); grille.setConstraints (sais91, constraints); buildConstraints (constraints, 0, 3, 1, 1, 20, 20); grille.setConstraints (sais92, constraints); buildConstraints (constraints, 0, 4, 1, 1, 20, 20); grille.setConstraints (sais93, constraints); center.add (choix); contenu.add ("West", panLthe); contenu.add ("East", panIRD); center.add (sais90); sais90.addActionListener (this); center.add (sais91); sais91.addActionListener (this); center.add (sais92); sais92.addActionListener (this); center.add (sais93); sais93.addActionListener (this); contenu.add ("Center", center); contenu.add ("South", panCatch); contenu.add ("South", panAmma); setVisible (true); } // // public void actionPerformed (ActionEvent ev) { // Mise à jour de la saison en cours if (ev.getSource() == sais90) saison = 1990; else if (ev.getSource() == sais91) saison = 1991; else if (ev.getSource() == sais92) saison = 1992; else if (ev.getSource() == sais93) saison = 1993; setVisible (false); } public void buildConstraints (GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy) { // Mise à jour des contraintes de la grille du panneau central gbc.gridx = gx; gbc.gridy = gy; gbc.gridwidth = gw; gbc.gridheight = gh; gbc.weightx = wx; gbc.weighty = wy; } // // public short saison() { return saison; } // +++++++++++++++++++++++++ // ++ Classes Logos ++ // +++++++++++++++++++++++++ // Classes internes à dialogDeb gérant les panneaux des logos class LogoLthe extends JPanel { public void paintComponent (Graphics g) { Graphics2D g2D = (Graphics2D)g; } } class LogoIRD extends JPanel { public void paintComponent (Graphics g) { Graphics2D g2D = (Graphics2D)g; g2D.drawImage (logoIrd, 0,0,this); } } class LogoCatch extends JPanel { public void paintComponent (Graphics g) { Graphics2D g2D = (Graphics2D)g; g2D.drawImage (logoCatch, 0,0,this); } } class LogoAmma extends JPanel { public void paintComponent (Graphics g) { Graphics2D g2D = (Graphics2D)g; g2D.drawImage (logoAmma, 0,0,this); } } } // fin Classe dialogDeb // +++++++++++++++++++++++++ // ++ Classe listEv ++ // +++++++++++++++++++++++++ class listEv extends JPanel implements ActionListener { // Attributs privés private JLabel choixEv = new JLabel ("Choisissez un événement : ",JLabel.LEFT); private JLabel choixIm = new JLabel ("Images : ",JLabel.LEFT); private JComboBox listev = new JComboBox(); private JComboBox listim = new JComboBox(); private Interface fen; // ********************** // * Méthodes publiques * // ********************** // // public listEv (Interface parent, int annee) // Configuration du panneau de gauche de l 'interface setPreferredSize (new Dimension (180,170)); setLayout (new FlowLayout(FlowLayout.LEFT)); setBorder (BorderFactory. createLineBorder (Color. yellow)); fen = parent; Vector datesEv = getListEvt (annee); Vector datesIm = new Vector(); int i=0; int j = 0, m = 0, a = 0, h = 0, min = 0, sec = 0; DecimalFormat df = new DecimalFormat("00"); // Création de la liste des événements for (Enumeration enum = datesEv.elements(); enum.hasMoreElements();) { GregorianCalendar date = (GregorianCalendar) enum.nextElement(); j = date.get(Calendar.DAY _OF _MONTH); m = date.get(Calendar.MONTH); a = date.get(Calendar.YEAR); h = date.get(Calendar.HOUR_OF _DAY); min = date.get(Calendar.MINUTE); sec = date.get(Calendar.SECOND); listev.addItem (df.format(j) + "/" + df.format(m) + "/" + df.format(a) + " " + df.format(h) + ":" + df.format(min) + ":" + df.format(sec)); if (i == 0) { datesIm = getListIm (j, m, a, h, min, sec); System.out.println("date : " + j + m + a + h + min + sec); } i++; } listev.setMaximumRowCount (10); // Création de liste des images for (Enumeration enum = datesIm.elements(); enum.hasMoreElements();) { GregorianCalendar date = (GregorianCalendar) enum.nextElement(); j = date.get(Calendar.DAY _OF _MONTH); m = date.get(Calendar.MONTH); a = date.get(Calendar.YEAR); h = date.get(Calendar.HOUR_OF _DAY); min = date.get(Calendar.MINUTE); sec = date.get(Calendar.SECOND); listim.addItem (df.format(j) + "/" + df.format(m) + "/" + df.format(a) + " " + df.format(h) + ":" + df.format(min) + ":" + df.format(sec)); } add (choixEv); add(Box.createRigidArea(new Dimension(180,5))); add (listev); add(Box.createRigidArea(new Dimension(180,5))); add (choixIm); add(Box.createRigidArea(new Dimension(180,5))); add (listim); listev.addActionListener (this); listim.addActionListener (this); } // // public void actionPerformed (ActionEvent evt) { if (evt.getSource() == listev) { // Mise à jour de la liste des événements et de la liste des images Object dat = listev.getSelectedItem(); String d = (String) dat; listim.removeAllItems (); int jour = Integer.parseInt (d.charAt(0) + "" + d.charAt(1)); int mois = Integer.parseInt (d.charAt(3) + "" + d.charAt(4)); int annee = Integer.parseInt (d.charAt(6) + "" + d.charAt(7) + "" + d.charAt(8) + "" + d.charAt(9)); int heure = Integer.parseInt (d.charAt(11) + "" + d.charAt(12)); int min = Integer.parseInt (d.charAt(14) + "" + d.charAt(15)); int sec = Integer.parseInt (d.charAt(17) + "" + d.charAt(18)); DecimalFormat df = new DecimalFormat("00"); Vector datesIm = getListIm (jour, mois, annee, heure, min, sec); for (Enumeration enum = datesIm.elements(); enum.hasMoreElements ();) { GregorianCalendar date = (GregorianCalendar) enum.nextElement(); jour = date. get (Calendar. DAY_OF_MONTH); mois = date.get(Calendar.MONTH); annee = date.get(Calendar.YEAR); heure = date.get(Calendar.HOUR_OF _DAY); min = date.get(Calendar.MINUTE); sec = date.get(Calendar.SECOND); listim.addItem (df.format(jour) + "/" + df.format(mois) + "/" + df.format(annee) + " " + df.format(heure) + ":" + df.format(min) + ":" + df. format (sec)); } add(listim); setVisible (true); } if (evt.getSource() == listim) { // Mise à jour de la liste des images et de l 'affichage de l 'image // en cours Object dat = listim.getSelectedItem(); String d = (String) dat; int jour = Integer.parseInt (d.charAt(0) + "" + d.charAt(1)); int mois = Integer.parseInt (d.charAt(3) + "" + d.charAt(4)); int annee = Integer.parseInt (d.charAt(6) + "" + d.charAt(7) + "" + d.charAt(8) + "" + d.charAt(9)); int heure = Integer.parseInt (d.charAt(11) + "" + d.charAt(12)); int min = Integer.parseInt (d.charAt(14) + "" + d.charAt(15)); int sec = Integer.parseInt (d.charAt(17) + "" + d.charAt(18)); JImage jim = new JImage (jour, mois, annee, heure, min, sec); fen.update (jim); } } public void reculListim() { listim.setSelectedIndex (listim.getSelectedIndex() - 1); } public void avanceListim() { listim.setSelectedIndex (listim.getSelectedIndex() + 1); } // // public JComboBox listim() { return listim; } public JComboBox listev() { return listev; } public Vector getListEvt (int annee) { // Création d'un vecteur avec la liste des événements Evenement ev = new Evenement(); int nbevts = 0; Vector dates = new Vector(); System.out.println("ListEvt : " + annee); try { RandomAccessFile fbase = null; switch (annee) { case 1990 : fbase = new RandomAccessFile (". ./. . /bdr90.dat", "r"); nbevts = 22; break; case 1991 : fbase = new RandomAccessFile (". ./. . /bdr91.dat", "r"); nbevts = 27; break; case 1992 : fbase = new RandomAccessFile("../../bdr92.dat", "r"); nbevts = 39; break; case 1993 : fbase = new RandomAccessFile("../../bdr93.dat", "r"); nbevts = 32; break; default : System.out.println ("ERREUR : Année non valide"); } byte jd = 0, jf, md = 0, mf, hd, hf, mind, minf, sd, sf, nbim = 0; short ad, af, nbrad; boolean trouve = false; int num = 0; fbase. seek (num); for (int e=0; e < nbevts; e++) { jd = fbase.readByte(); md = fbase.readByte(); ad = fbase.readShort(); hd = fbase.readByte(); mind = fbase.readByte(); sd = fbase.readByte(); jf = fbase.readByte(); mf = fbase.readByte(); af = fbase.readShort(); hf = fbase.readByte(); minf = fbase.readByte(); sf = fbase.readByte(); nbim = fbase.readByte(); GregorianCalendar dateDeb = new GregorianCalendar (ad, md, jd, hd, mind, sd); GregorianCalendar dateFin = new GregorianCalendar (af, mf, jf, hf, minf, sf); ev = new Evenement (dateDeb, dateFin, nbim, num); dates. add (dateDeb); fbase.seek (num += 15); for (int i=0; i < nbim; i++) { fbase.seek (num += 16); nbrad = fbase.readShort(); fbase.seek (num += 3); fbase.seek (num += (nbrad*520)); } // fin Boucle des images d'un événement } // fin Boucle des Evenements fbase.close(); } // fin du Try catch (Exception e) { System.out.println (e.toString()); } return dates; } // fin getListEvt public Vector getListIm (int jour, int mois, int annee, int heure, int minute, int seconde) { // Création d'un vecteur avec la liste des images Evenement ev = new Evenement(); ev = ev.getEvenement (jour, mois, annee, heure, minute, seconde); int num = ev.positionFich(); Vector dates = new Vector(); try { RandomAccessFile fbase = null; if (annee == 1990) fbase = new RandomAccessFile("../../bdr90.dat", "r"); else if (annee == 1991) fbase = new RandomAccessFile("../../bdr91.dat", "r"); else if (annee == 1992) fbase = new RandomAccessFile("../../bdr92.dat", "r"); else if (annee == 1993) fbase = new RandomAccessFile("../../bdr93.dat", "r"); else System.out.println ("ERREUR : Année non valide"); byte j, m, h, min, sec; short a, nbrad; fbase.seek (num); for (int i=0; i < ev.nbImages(); i++) { j = fbase.readByte(); m = fbase.readByte(); a = fbase.readShort(); h = fbase.readByte(); min = fbase.readByte(); sec = fbase.readByte(); GregorianCalendar date = new GregorianCalendar (a, m, j, h, min, sec); dates.add (date); fbase.seek (num += 16); nbrad = fbase.readShort(); fbase.seek (num += 3); fbase.seek (num += (nbrad*520)); } fbase.close(); } // fin du Try catch (Exception e) { System.out.println (e.toString()); } return dates; } // fin getListIm } // fin Classe listEv // ++++++++++++++++++++++++++++ // ++ Classe Badora : Main ++ // ++++++++++++++++++++++++++++ public class Badora { public static void main (String[] args) { Interface fen = new Interface(); fen. setVisible (true); } } // fin Classe Badora Evenement.j ava import java.util.*; import java.io.*; public class Evenement { // Attributs privés private GregorianCalendar dateDeb; private GregorianCalendar dateFin; private int nbImages; private int positionFich; // octet de position du début de l'événement dans le fichier 77 ************************ 77 * Méthodes publiques * 77 ************************ 77 77 public Evenement () { dateDeb = null; dateFin = null; nbImages = 0; positionFich = 0; } public Evenement (GregorianCalendar dd, GregorianCalendar df, int nbim , int pos) { dateDeb = dd; dateFin = df; nbImages = nbim; positionFich = pos; } 77 77 public void afficheInfos() { System.out.println("-= Evenement : =-"); System.out.print("Date début: " + dateDeb.get(Calendar.DAY _OF _MONTH) + "7" + dateDeb.get(Calendar.MONTH) + "7" + dateDeb.get(Calendar.YEAR)); System.out.println (" " + dateDeb.get(Calendar.HOUR_OF _DAY) + ":" + dateDeb.get(Calendar.MINUTE) + ":" + dateDeb.get(Calendar.SECOND)); System.out.print ("Date fin : " + dateFin.get(Calendar.DAY _OF _MONTH) + "7" + dateFin.get(Calendar.MONTH) + "7" + dateFin.get(Calendar.YEAR)); System.out.println (" " + dateFin.get(Calendar.HOUR_OF _DAY) + ":" + dateFin.get(Calendar.MINUTE) + ":" + dateFin.get(Calendar.SECOND)); System.out.println("Nombre d'images : " + nbImages); } public void ajoutImage(GregorianCalendar date, ImageRadar im) { images.put (date, im); } 77 77 public int nbImages() { return nbImages; } public int positionFich() { return positionFich; } public Evenement getEvenement(int jour, int mois, int annee, int heure, int minute, int sec) { // Recherche d'un événement pour une date donnée Evenement ev = new Evenement(); try { // Ouverture du fichier selon l'année RandomAccessFile fbase = null; if (annee == 1990) fbase = new RandomAccessFile("..7..7bdr90.dat", "r"); else if (annee == 1991) fbase = new RandomAccessFile("../../bdr91.dat", "r"); else if (annee == 1992) fbase = new RandomAccessFile("../../bdr92.dat", "r"); else if (annee == 1993) fbase = new RandomAccessFile("../../bdr93.dat", "r"); else System.out.println ("ERREUR : Année non valide"); byte jd = 0, jf, md = 0, mf, hd = 0, hf, mind = 0, minf, sd = 0, sf, nbim = 0; short ad = 0, af, nbrad; boolean trouve = false; // Début du fichier int num = 0; fbase. seek (num); while (!trouve) { // lecture du jour du 1er événement jd = fbase.readByte(); while (jd != jour) { // on saute jusqu'à l'événement suivant fbase.seek (num += 14); nbim = fbase.readByte(); fbase.seek (num += 17); for (int i=0; i < nbim; i++) { nbrad = fbase.readShort(); fbase.seek(num += 3); fbase.seek (num += (nbrad*520)); fbase.seek (num += 5); fbase.seek (num += 11); } fbase.seek (num -= 16); jd = fbase.readByte(); } if (jd == jour) { // on vérifie que c'est bien l'événement recherché md = fbase.readByte(); ad = fbase.readShort(); hd = fbase.readByte(); mind = fbase.readByte(); sd = fbase.readByte(); if (md == mois && hd == heure && mind == minute && sd == sec) trouve = true; } } if (trouve) { // si le bon événement : lecture de tous ses champs jf = fbase.readByte(); mf = fbase.readByte(); af = fbase.readShort(); hf = fbase.readByte(); minf = fbase.readByte(); sf = fbase.readByte(); nbim = fbase.readByte(); num += 15; sd); sf); GregorianCalendar dateDeb = new GregorianCalendar (ad, md, jd, hd, mind, GregorianCalendar dateFin = new GregorianCalendar (af, mf, jf, hf, minf, ev = new Evenement (dateDeb, dateFin, nbim, num); } fbase.close(); } // fin du Try catch (Exception e) { System.out.println (e.toString()); } ev.afficheInfos (); return ev; } // fin getEvenement } // fin Classe Evenement {
JImage.java import java.awt.*; import java.awt.image.*; import java.awt.event.*; import javax. swing.*; import java.util.*; import java.io.*; import java.lang.*; import com. keypoint.*; // +++++++++++++++++++++++++ // ++ Classe JImage ++ // +++++++++++++++++++++++++ public class JImage extends JPanel { // Attributs privés private Image imRadar = null; private ImageRadar image = new ImageRadar(); // ************************ // * Méthodes publiques * // ************************ // // public JImage (int jour, int mois, int annee, int heure, int min, int sec) { super(); image = image.getImage(jour, mois, annee, heure, min, sec); image. afficheInfos (); setBackground (Color.black); setBorder (BorderFactory. createLineBorder (Color. red)); repaint(); } public JImage (ImageRadar im) { super(); image = im; image. afficheInfos (); setBackground(Color.black); setBorder (BorderFactory. createLineBorder (Color.red)); repaint(); } // // *** Méthodes de mise à jour *** // public void drawImageRadar (Vector pixels) { // dessin de l'image radar Graphics g0 = getGraphics(); Graphics2D g =(Graphics2D) g0; // création d'un buffer image pour stocker temporairement l'image Buf feredImage imTemp = new BufferedImage(450, 450,BufferedImage. TYPE _INT _RGB); g = imTemp.createGraphics(); g.setBackground (Color.black); // parcours des lignes à dessiner avec attribution de la couleur (tableau pixels) for (Enumeration enum = pixels.elements(); enum.hasMoreElements();) { case 11 : g.setColor (Color.red); break; case 12 : g.setColor (new Color(220, 220, 220)); break; case 13 : g.setColor (Color.black); break; case 14 : g.setColor (Color.white); break; default : g.setColor (getBackground()); break; } // dessin de la ligne g.drawLine (jpix.xOrigine(), jpix.yOrigine(), jpix.xDestin(), jpix.yDestin()); } g.setColor (Color.white); // dessin des cercles concentriques donnant la distance int[ ] reso = { 250, 500, 750}; int nbkm = (reso[ image.resolution()] * 512) / 1000; int nbcercles = (int) nbkm / 50; int hauteur = (int) (50 * 450 / nbkm / 1.5); int hautinit = hauteur; for (int i=0; i < nbcercles; i++) { g.drawOval (225-(hauteur/2) ,225-(hauteur/2) , hauteur, hauteur); hauteur = hauteur + hautinit; } g.rotate(Math.toRadians (90)); imRadar = imTemp; } // fin de drawImageRadar public void paintComponent (Graphics g) { // Méthode qui affiche l'image à l'écran Graphics2D g2D = (Graphics2D)g; g2D.clearRect(0,0,getSize() .width,getSize() .height); g2D. setColor (Color. lightGray); g2D.fillRect(0,0,getSize().width,getSize().height); setBorder (BorderFactory. createLineBorder (Color. red)); if (imRadar == null) { // création de l 'image imRadar = createImage(getWidth() ,getHeight ()); Vector pixels = new Vector(); pixels = image.afficheImageMatrice (256); drawImageRadar (pixels); } // affichage de l 'image au centre l 'écran g2D.drawImage(imRadar, (getWidth()/2)-(imRadar.getWidth(this) /2), (getHeight() /2)- (imRadar . getHeight (this) /2) ,this); if (message != null) { g2D.drawString( message, 10, 10 ); } } // fin Classe Jimage |
|