IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[JDesktopPane] Comment bien gérer les JInternalFrame ?


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut [JDesktopPane] Comment bien gérer les JInternalFrame ?
    Bonjour,

    Voici ma petite question.

    Je dois gérer des fiches de consultation clients et fournisseurs.

    Ces fiches sont des données qui seront placées dans une interface graphique dans une JInternalFrame.

    L'utilisateur pourra à loisir ouvrir et fermer ses 2 fenêtres de consultation client et fournisseur.

    Comment gérer ces JInternalFrame ?

    Vaut-il mieux les créer une bonne fois pour toute, et les afficher ou les cacher, au bon vouloir de l'utilisateur, pour ménager la JVM ?

    Ou alors ne les créer que quand l'utilisateur veut les voir, et les détruire complètement juste après chaque consultation de la fiche ?

    [ Si vous avez un exemple de programme déjà fait, similaire à ma demande, je suis preneur du lien ! ]
    ;-)

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,

    Une autre solution pourrait être d'utiliser un cache des n dernières fenetres ouvertes, avec une Map.
    Lorsqu'on veut ouvrir une fenetre récente on n'a pas besoin de la réallouer.
    Et quand le cache est plein, on écrase la fenetre la plus ancienne.

    D'un autre côté, si l'utilisateur compte réutiliser une fenêtre, il la réduit au lieu de la fermer. Si il la ferme, c'est qu'il ne compte plus s'en servir.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Comment fais-tu pour implémenter un cache des n dernières fenêtres ouvertes ?

    [ EDIT : ha oui... Pas bien lu, avec un Map d'objets... ]

    C'est difficile ? As-tu un exemple ?

    J'ai un peu peur de lenteur, si à chaque ouverture de JInternalFrame, le programme doit recréer l'interface graphique...

    C'est ça ma crainte...

    Merci d'avance à toi, Xavlours.

  4. #4
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Ben, ça dépend de comment sont construites les fenetres en fonction des données.
    Mais ça pourrait ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    public class MyInternalFrame extends JInternalFrame {
      public MyInternalFrame(SomeData data) {
        ...
      }
    }
     
     
    public class MyFrameManager {
     
      private static class CacheKey implements Comparable {
     
        public SomeData data;
     
        public long date;
     
        public CacheKey(SomeData data) {
          this.data = data;
          this.date = System.currentTimeMillis();
        }
     
        public boolean equals(CacheKey o) {
          return data.equals(o.data);
        }
     
        public void compareTo(CacheKey o) {
          if(this.equals(o))
            return 0;
          else
            return date - o.date
        }
      }
     
      private Map<CacheKey, MyInternalFrame> cache = new TreeMap<CacheKey, MyInternalFrame>();
     
      private int maxCacheSize;
     
      public MyInternalFrame getFrame(SomeData data) {
        CacheKey key = new CacheKey(data);
        MyInternalFrame frame = cache.get(key);
     
        if(frame == null)
          frame = new MyInternalFrame(data);
     
        cache.put(key, frame);
        // si la frame y était on actualise la date
        // sinon on crée une entrée
     
        while(cache.size() >= maxCacheSize)
          cache.remove(cache.lastKey());
     
      }
    Il me semble que ça devrait marcher.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Mais ce que je te propose ne marchera que si tu réaffiches vraiment les mêmes données.

    Une troisième solution est d'avoir un cache de JInternalFrames déjà allouées, auxquelles on peut "brancher" et "débrancher" le contenu.

    Franchement, tu dois avoir des JInternalFrames super super compliquées pour te poser des questions pareilles :
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

Discussions similaires

  1. Comment bien gérer les index ?
    Par éric1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/08/2009, 14h35
  2. Comment bien gérer les variables de session ?
    Par rad_hass dans le forum ASP.NET
    Réponses: 4
    Dernier message: 29/04/2008, 10h14
  3. Réponses: 3
    Dernier message: 29/05/2007, 16h50
  4. [Include/Require] Comment bien gérer les chemins ?
    Par Wookai dans le forum Langage
    Réponses: 1
    Dernier message: 11/04/2007, 09h11
  5. Comment bien gérer les utilisateurs multiples
    Par Vesta dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/06/2006, 08h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo