Graphics et Incompatilité des resultats d'une methode via/sans interfa

Graphics et Incompatilité des resultats d'une methode via/sans interfa - Java - Programmation

Marsh Posté le 28-01-2012 à 18:18:09    

Bonjour a tous,  
 
Dans le cadre d'un TP en java (je précise que je travaille avec Netbeans) je dois mettre en place une interface graphique représentant une mémoire (une ArrayList) constituée de blocs  , et donc ces blocs peuvent soit être des blocs vides (qui sont en fait des fichiers avec le nom "vide" et une taille donnée) soit peuvent être des fichiers (caractérisés par un nom et une taille)
En fait sur cette interface , on peut trouver :
 
+ Les 3/4 supérieurs de l'interface est en fait un dessin (qui doit être géré selon le TP par la classe Graphic)  qui représente de gauche a droite la mémoire (l'arraylist) que l'on a et qui doit représenter les blocs (fichiers) vide par un rectangle de couleur claire (sur laquelle on écrit le nom "vide" et le taille de ce bloc) et les blocs non vides par des rectangles de couleur foncée (on écrit le nom du fichier et sa taille) et bien sur l'image représentant chaque bloc doit être proportionnelle en largeur a par rapport a la taille maximale de la mémoire.  
 
+ Le 1/4 inférieur de l'interface est réservé au fonction Add et Remove qui sont en fait représentés par deux boutons :
    -Add : ajoute dans la mémoire (d’après certaines conditions) le fichier dont on aura écrit le nom et la taille dans deux espaces JTextField précédant le bouton Add
    -Remove : efface de la mémoire le fichier dont on aura ecrit le nom dans un espace JTextField précédant le bouton Remove.
 
 
Vous l'aurez compris , a chaque Add et Remove je dois redessiner la mémoire dans la partie supérieure .
Désole de la longueur mais je voulais expliquer le contexte du TP pour pouvoir poser mes questions : (Je travaille avec NetBeans)
 
 
1) Comment arriver a Dessiner sur la partie qui m’intéresse en sachant que j'ai déjà mis un Jframe pour la surface de toutes l'interface et un JPanel1 englobant toute cette surface et qui contient les boutons Add et Remove dans la partie inférieure. (je précise que mon interface est non redimensionnable) (PROBLEME RESOLU) (mais besoin de resoudre le probleme 2 pour tester la version finale)
 
 
2) Ayant déjà développé la fonction qui gère l'ajout du fichier dans la mémoire et l'ayant testé hors de l'interface je ne remarque rien d'anormal , par contre quand je configure le bouton Add pour faire appel a cette méthode j'ai des résultats erroné alors que tout les paramètres sont passés correctement . (ayant fait plusieurs test sans succès je m'en remet a vous pour m'aider)
 
RQ: la fonction d'ajout est comme suit :
 
-Si un bloc vide contient assez de mémoire on met le fichier dedans et on génère un autre fichier vide contenant le reste.
 
-S'il n'y a aucun fichier vide contenant assez de mémoire pour le fichier , on défragmente la mémoire et on rassemble tout les blocs vide en un seul et effectue l'ajout si le nouveau bloc vide peut contenir la taille du fichier sinon on n'ajoute pas le fichier
 
RQ2: l'arrayList en question est un attribut de classe représentant l'interface de gestion de la mémoire (d’où le

Code :
  1. this.memoire

)
 
 
Je poste le code de la fonction ajouter de du bouton qui le gère ci dessous :

Code :
  1. public ArrayList<Fichier> ajoutFichier(Fichier newFichier, ArrayList<Fichier> oldList) {
  2.  
  3.        int tailleVide = 0;
  4.        ArrayList<Fichier> newList = oldList;
  5.        
  6.        
  7.        
  8.        boolean fichierAjoute = false;
  9.        boolean fichierExistant = false;
  10.        boolean memoireSaturee = true;
  11.  
  12.        for (int k = 0; k < newList.size(); k++) {
  13.            if (newList.get(k).nomFichier.equalsIgnoreCase("Vide" )) {
  14.                memoireSaturee = false;
  15.                k = newList.size();
  16.            }
  17.        }
  18.        
  19.        
  20.        for (int j = 0; j < newList.size(); j++) {
  21.            if (newList.get(j).nomFichier.equalsIgnoreCase(newFichier.nomFichier)) {
  22.                fichierExistant = true;
  23.                j = newList.size();
  24.            }
  25.        }
  26.  
  27.        
  28.      if (!memoireSaturee)  {
  29.        if (!fichierExistant) {
  30.  
  31.            for (int i = 0; i < newList.size() && !fichierAjoute; i++) {
  32.  
  33.                if (newList.get(i).nomFichier.equalsIgnoreCase("Vide" ) && newFichier.tailleFichier <= newList.get(i).tailleFichier && !fichierAjoute) {
  34.  
  35.                   newList.get(i).tailleFichier = newList.get(i).tailleFichier - newFichier.tailleFichier;
  36.                    if (newList.get(i).tailleFichier == 0) newList.remove(i);
  37.                    
  38.                    newList.add((i), newFichier);
  39.                    i = newList.size();
  40.                    fichierAjoute = true;
  41.                  
  42.                    JOptionPane.showConfirmDialog(this, "Ajout reussi du fichier : " + newFichier.nomFichier + " de taille : " + newFichier.tailleFichier, "Ajout de Fichier", JOptionPane.PLAIN_MESSAGE, JOptionPane.INFORMATION_MESSAGE);
  43.  
  44.                }
  45.              
  46.  
  47.            }
  48.  
  49.            if (!fichierAjoute) {
  50.  
  51.                JOptionPane.showConfirmDialog(this, "Espace insuffisant , la defragmentation aura lieu !", "Ajout de fichier", JOptionPane.PLAIN_MESSAGE, JOptionPane.WARNING_MESSAGE);
  52.                
  53.                
  54.                for (int i = 0; i < newList.size(); i++) {
  55.                    if (newList.get(i).nomFichier.equalsIgnoreCase("Vide" )) {
  56.                        tailleVide = tailleVide + newList.get(i).tailleFichier;
  57.                        newList.remove(i);
  58.                      
  59.                        if (i==0) i=0;
  60.                        else i--;
  61.                        
  62.                    }
  63.                }
  64.      
  65.                
  66.                Fichier videDefrag = new Fichier("Vide", tailleVide);
  67.                newList.add(videDefrag);
  68.                
  69.          
  70.                
  71.                int lastIndexVide = (newList.size() - 1);
  72.                if (newFichier.tailleFichier <= tailleVide) {
  73.                    newList.add((lastIndexVide), newFichier);
  74.                    newList.get(newList.lastIndexOf(videDefrag)).tailleFichier -= newFichier.tailleFichier;
  75.                    if (newList.get(newList.lastIndexOf(videDefrag)).tailleFichier == 0)
  76.                            newList.remove(videDefrag);
  77.  
  78.                    JOptionPane.showConfirmDialog(this, "Ajout reussi du fichier : " + newFichier.nomFichier + " de taille : " + newFichier.tailleFichier, "Ajout de Fichier", JOptionPane.PLAIN_MESSAGE, JOptionPane.INFORMATION_MESSAGE);
  79.  
  80.                } else {
  81.                    JOptionPane.showConfirmDialog(this, "Espace insuffisant meme apres la defragmentation !", "Ajout de fichier", JOptionPane.PLAIN_MESSAGE, JOptionPane.WARNING_MESSAGE);
  82.                }
  83.  
  84.            }
  85.  
  86.        } else {
  87.            JOptionPane.showConfirmDialog(this, "Fichier : "+newFichier.nomFichier+" déjà existant !", "Ajout de fichier", JOptionPane.PLAIN_MESSAGE, JOptionPane.WARNING_MESSAGE);
  88.        }
  89.  
  90.    } else {
  91.          JOptionPane.showConfirmDialog(this, "Memoire saturée !", "Ajout de fichier", JOptionPane.PLAIN_MESSAGE, JOptionPane.WARNING_MESSAGE);
  92.      }
  93.      
  94.        return newList;
  95.    }


 
Et voici maintenant la methode du bouton qui est censé gerer cet Ajout :
 

Code :
  1. private void boutonAjoutActionPerformed(java.awt.event.ActionEvent evt) {                                            
  2.        int tailleFichier = 0;
  3.        String nomFichier = new String();
  4.        boolean nomCorrect = false;
  5.        boolean tailleCorrecte = false;
  6.  
  7.  
  8.  
  9.        try {
  10.            tailleFichier = Integer.parseInt(this.tailleFichierAjout.getText());
  11.            tailleCorrecte = true;
  12.            //if (tailleFichier > this.tailleFinaleMemoire) throw new TailleAjouterFichierException;
  13.            //this.tailleFichierAjout.setEnabled(false);
  14.        } catch (NumberFormatException e) {
  15.            tailleCorrecte = false;
  16.            JOptionPane.showMessageDialog(this, "Nombre non correct !", "Taille Fichier à ajouter", JOptionPane.ERROR_MESSAGE);
  17.  
  18.        }
  19.  
  20.  
  21.        try {
  22.            nomFichier = nomFichierAjout.getText();
  23.            if (nomFichier.equals("" ))   {int x = 3/0;}
  24.            else                        nomCorrect = true;
  25.  
  26.  
  27.        } catch (Exception e) {
  28.            nomCorrect = false;
  29.            JOptionPane.showMessageDialog(this, "Nom non correct !", "Nom Fichier à ajouter", JOptionPane.ERROR_MESSAGE);//*/
  30.  
  31.        }
  32.  
  33.  
  34. if (tailleCorrecte && nomCorrect) {
  35.        Fichier newFichier = new Fichier(nomFichier, tailleFichier);
  36.  
  37.        this.memoire = ajoutFichier(newFichier, this.memoire);
  38.        
  39.       }
  40.    }


 
[B][SIZE="5"]Problème :[/SIZE][/B]
Quand j'affiche ma mémoire manuellement avec le Sysout je remarque que l'on a soustrait la taille du nouveau fichier de la taille de TOUT les blocs vides !!!
 
 
PS : Je vous le concède ; il y a de multiples choses qui font de ce code tout sauf optimal mais n'ayant eu que 3 jours pour me familiariser avec le concept d'interface graphique et pour tout écrire j'ai du écrire un petit peu avec barbarie bref merci pour la lecture et pour l’éventuelle aide .
 
PS2 : si quelqu'un a assez de temps libre pour voir tout le code en entier qu'il me MP pour que je lui envoie tout le projet . (via upload)
 
MB


Message édité par mahermaher89 le 29-01-2012 à 17:45:22
Reply

Marsh Posté le 28-01-2012 à 18:18:09   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed