WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Badora


par Stéphane Clerc
UPMF - Grenoble - IUT II 2003
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

Glossaire

Azimut : Le radar peut pivoter sur 2 axes différents : soit verticalement, soit horizontalement. Quand la rotation est horizontale, le balayage du radar se fait dans le sens des aiguilles d'une montre et à chaque intervalle de tir on peut déterminer l'azimut (en degrés) qui est l'angle entre la ligne de visée du radar et le Nord géographique.

DBz : Unité de mesure de la réflectivité radar.

Degré carré : carré de 1° de latitude et 1° de longitude.

Evénement : Un événement pluvieux est l'ensemble des images qui correspondent à un même phénomène météorologique. Cela peut durer de quelques heures à quelques jours environ.

PPI / RHI : Il existe deux modes d'observation du radar. En mode PPI, le radar effectue un balayage horizontal avec un site constant et l'azimut qui peut varier sur les 360 degrés. En mode RHI, c'est l'azimut qui est fixe et le site lui varie de 0 à 90 degrés.

Radiale : Une radiale correspond à un tir du radar.

Réflectivité (en DBz) : Le radar envoie dans l'atmosphère des impulsions électromagnétiques qui sont renvoyées en partie lorsque le signal rencontre une cible. Cette cible peut être un nuage ou des précipitations. Cela permet de déterminer la réflectivité suivant le volume de l'impulsion retourné.

Secteur couvert : Différence entre l'azimut de la dernière radiale et l'azimut de départ.

Site : L'inclinaison du radar donne la valeur du site (en degrés). Lors d'une rotation horizontale, le site doit donc être constant si l'on veut obtenir une image juste de la situation météorologique présente.

Bibliographie - Webographie

· Banque de données BADORA : "Manuel utilisateur de BADORA"

· Programmation générale en Java :

"Programmer en Java" de Claude Delannoy aux Editions Eyrolles

"Le programmeur Java 2" de Laura Lemay et Rogers Cadenhead aux Editions CampusPress

http://www.infini-fr.com/Sciences/Informatique/Langages/Imperatifs/Java/java.html http://www.eteks.com/coursjava/tdm.html

http://java.sun.com/

http://www.commentcamarche.net/java/

· La sérialisation : http://www.club-java.com/Public/articles/articleCJ.html

· Interfaces graphiques : "Java 2D Graphics" de Jonathan Knudsen aux Editions O'Reilly

· Programmes CGI : http://members.aol.com/martpopuo/cgi.htm

· PNG Encoder : http://catcode.com/pngencoder/

Annexes

Annexe 1 p. 36 : Description des différentes classes Java

Annexe 2 p. 38 : Code commenté des classes principales du programme Java (Badora.java) :

- page 38 : Classe Interface

- page 40 : Classe dialogDeb - page 42 : Classe listEV - page 46 : Classe Badora

Annexe 3 p. 47 : Code commenté de la classe Evénement avec la recherche d'un événement dans un fichier de la banque de données.

Annexe 4 p. 49 : Extrait de la Classe JImage avec la création et l'affichage d'une image radar.

Annexe 1 : Description des classes Java

· Badora (1) :

Badora est la classe appelée pour exécuter le programme puisqu'elle ne comporte que le Main() qui construit une nouvelle interface en créant une instance de la classe Interface.

· Interface (2) :

Cette classe est la plus importante du programme et gère toute l'interface graphique. Elle construit tout d'abord la fenêtre de bienvenue puis affiche la fenêtre principale. C'est elle qui gère tous les événements déclenchés par les clics de l'utilisateur dans la fenêtre et qui créé les images (objets de la classe JImage) à afficher à l'écran.

· dialogDeb (3) :

Il s'agit de la fenêtre d'accueil du programme avec les logos des laboratoires et des boutons pour choisir une saison à consulter. Cette classe possède quatre classes internes qui sont les quatre panneaux servant à afficher les logos. Une fois que l'utilisateur a cliqué sur un des boutons, la fenêtre principale s'ouvre à la place et affiche la 1ère image du 1er événement pour l'année sélectionnée. Si l'on ferme cette fenêtre sans cliquer sur un des boutons, le programme est alors arrêté.

· listEv (4) :

C'est le panneau se trouvant à gauche de l'écran avec les listes déroulantes permettant de choisir un événement et une image. Selon l'image sélectionnée dans la liste il renvoit à la fenêtre principale la nouvelle image à afficher.

· JImage (5) :

Cette classe est un panneau comportant l'image radar à afficher. Elle dessine à l'écran l'image suivant les données d'un objet de la classe ImageRadar. Si l'utilisateur demande à enregistrer

l'image à afficher, elle gère la conversion en PNG (en appelant des fonctions de la librairie PNG Encoder) et sauve le fichier sur le disque.

· Evénement (6) :

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.

(1) Cf. Annexe 2 page 46 pour le code commenté

(2) Cf. Annexe 2 page 38 pour le code commenté

(3) Cf. Annexe 2 page 40 pour le code commenté

(4) Cf. Annexe 2 page 42 pour le code commenté

(5) Cf. Annexe 4 page 49 un extrait de code commenté

(6) Cf. Annexe 3 page 47 pour le code commenté

· ImageRadar :

De même que la classe Evènement elle contient les attributs d'une image radar et possède des fonctions de recherche d'images dans les fichiers binaires. Elle a en plus une fonction qui permet de créer l'image à afficher, c'est-à-dire qu'elle crée un vecteur d'objets de la classe Radiale. Le traitement des points à afficher se fait dans cette dernière classe.

· Radiale :

Cette classe traite chaque porte d'une radiale et transforme les coordonnées polaires en coordonnées cartésiennes. De plus elle affecte une couleur par porte suivant la réflectivité de celle-ci. Ainsi elle crée un tableau d'objets de la classe Ligne qui sont en fait les lignes à afficher à l'écran.

· Ligne :

La classe Ligne possède cinq attributs qui sont : l'abscisse d'origine de la ligne, l'ordonnée d'origine, l'abscisse de destination, l'ordonnée de destination et la couleur de la ligne. Une ImageRadar est en fait constituée de plusieurs Radiale comportant un ensemble de Ligne et c'est la classe JImage (qui est le panneau d'affichage) qui va finalement parcourir l'ensemble des lignes et les dessiner selon les coordonnées et la couleur données.

· Anim :

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 *** Constructeur ***

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

//
// *** Méthodes de mise à jour ***

//

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")
modifSaisonEnCours ((short) 1991);

else if ((String) annee == "Saison 1992") modifSaisonEnCours((short)1992);

else if ((String) annee == "Saison 1993") modifSaisonEnCours((short)1993);
contenu.remove (listev);

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
System.exit (0);

}

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 * // **********************

//
// *** Constructeur ***

//

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

}

//
// *** Méthodes de mise à jour ***

//

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;

}

//
// *** Méthodes de consultation ***

//

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;
g2D.drawImage (logoLthe, 0,0, this);

}

}

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 * // **********************

//
// *** Constructeur ***

//

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

}

//
// *** Méthodes de mise à jour ***

//

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

}

//
// *** Méthodes de consultation ***

//

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 *** Constructeurs ***

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 *** Méthodes d'affichage ***

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 *** Méthodes de consultation ***

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

{

case

0 :

g.setColor

(new Color(221, 160, 221)); break;

case

1 :

g.setColor

(Color.magenta); break;

case

2 :

g.setColor

(new Color(255, 20, 147)); break;

case

3 :

g.setColor

(Color.blue); break;

case

4 :

g.setColor

(new Color(0, 0, 139)); break;

case

5 :

g.setColor

(new Color(34, 139, 34)); break;

case

6 :

g.setColor

(new Color(50, 205, 50)); break;

case

7 :

g.setColor

(new Color(0, 255, 0)); break;

case

8 :

g.setColor

(new Color(255, 140, 0)); break;

case

9 :

g.setColor

(new Color(205, 133, 63)); break;

case

10 :

g.setColor

(new Color(199, 21, 133)); break;

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 * // ************************

//
// *** Constructeurs ***

//

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 de paint

} // fin Classe Jimage

précédent sommaire suivant






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Ceux qui rêvent de jour ont conscience de bien des choses qui échappent à ceux qui rêvent de nuit"   Edgar Allan Poe