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 :

[Swing] Affichage de fiches produits avec image


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut [Swing] Affichage de fiches produits avec image
    Je désire continuer mon ré-apprentissage progressif de java.

    Après avoir fait une mini application qui enregistre ses données dans une BDD embarquée comme HSQLDB :
    cf ce post-ci
    http://www.developpez.net/forums/sho...d.php?t=462899
    (à améliorer encore en gérant les enregistrements comme instances d'une classe !! )

    Je voudrais ajouter à mes enregistrements une image (surtout du jpeg).

    C-à-d, quand on crée un enregistrement avec un ID "XXX", qu'on ait la possibilité d'aller chercher une image sur le disque dur (avec un JFileChooser) et qu'ensuite, cette image soit formatée (hauteur max, largeur max) pour être stockée (en l'état formaté) dans un folder annexe avec comme nom imageXXX.jpg .

    Ma question avant ma mise en pratique : comment gérer l'affichage des images dans mon interface SWING pour toute la panoplie des enregistrements déjà réalisés (images affichables en consultation par l'utilisateur) ?

    1) Doit-on envisager de toutes les pré-charger en mémoire ? En même temps que toute ma collection des objets représentant mes enregistrements ?

    2) Ou vaut-il mieux gérer un chargement-déchargement permanent des images stockées dans le folder des images formatées, en fonction des demandes d'affichage de l'utilisateur, pour ménager la mémoire ?

  2. #2
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    Une autre façon de poser ma question :

    Comment gère-t-on au mieux les images et imagettes d'un mini-programme simple que je veux réaliser et dont l'IHM sera comme ceci :



    Je n'ai aucun problème pour la construction de l'interface et le mécanisme du programme...

    Je voudrais juste un conseil pour savoir comment on gère l'affichage-désaffichage des imagettes.

    Faut-il toutes les pré-charger en mémoire ? Si c'est une BDD énorme, ça pourrait alors poser problème, non ?

    (Ce programme sera mis dans la rubrique "Partagez vos sources" quand je l'aurai fini, c'est pour ça que je veux le faire correctement)

  3. #3
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 748
    Par défaut
    Ce genre d'image peut être géré sans problème par la classe JLabel qui peut aussi bien afficher une image, du texte ou les deux.

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 748
    Par défaut
    un petit exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JLabel jl = new JLabel(new ImageIcon(getClass().getResource("/image.png")));

  5. #5
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    Oui, OK. Il y a en effet plusieurs façons de pouvoir intégrer l'image dans l'interface graphique. Je n'ai pas de soucis avec ça.

    Mais ce que je voudrais savoir : faut-il toutes les charger en une fois (même s'il y a 100.000 produits dans la liste...) ?

    Ou y-a-t-il moyen de faire en sorte qu'on charge juste l'image du produit affiché dans la partie supérieure et seulement les imagettes des lignes "visibles" de la JTable en dessous ? (est-ce possible ce dernier point ?)

    C'est plutôt sur cet aspect du chargement dynamique en mémoire que se concentre ma question...

  6. #6
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    donc c'est à toi de gérer ça. par exemple, quand tu choisis un autre produit, par un bouton "suivant" ou autre, t'executes la requete appropriée et tu charges l'image.

    j'espere avoir été clair !

  7. #7
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 748
    Par défaut
    Pour l'affichage/désaffichage, c'est malheureusement difficile de répondre, ca dépend de ce que tu estime acceptable niveau consomation mémoire et du nombre d'image que tu souhaite afficher.
    Personellement je n'ai jamais eu de problème même en utilisant beaucoup de JLabel.

  8. #8
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    Oui, c'est clair bassim mais j'ai besoin de détails.

    Exemple : si je charge une image avec :

    getClass().getResource("/image019.png")

    Est-ce que si je fais défiler 100.000 produits, est-ce que cela va garder en mémoire 100.000 fois le poids de chaque image ? Ou dois-je expréssement ajouter une fonction qui va abandonner au GarbageCollector l'image qui n'est plus affichée (à ma demande) ?

    Comment relâche-t-on une image au Garbage Collector ?

    Autre aspect de la question : peut-on savoir avec une JTable si une ligne est VISIBLE à l'écran (et non pas cachée au fond d'un JSCrollPane par exemple) ?

  9. #9
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    Citation Envoyé par Uther Voir le message
    Pour l'affichage/désaffichage, c'est malheureusement difficile de répondre, ca dépend de ce que tu estime acceptable niveau consomation mémoire et du nombre d'image que tu souhaite afficher.
    Personellement je n'ai jamais eu de problème même en utilisant beaucoup de JLabel.
    Oui. C'est vrai que c'est pas courant 100.000 affichages, mais j'avais en tête de faire un mini-exemple valable aussi dans cette situation extrême, d'où ma demande d'avis à quelqu'un qui aurait déjà implémenté un système d'affichage dynamique de ce genre...

  10. #10
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    Citation Envoyé par calogerogigante Voir le message
    Oui, c'est clair bassim mais j'ai besoin de détails.

    Exemple : si je charge une image avec :

    getClass().getResource("/image019.png")

    Est-ce que si je fais défiler 100.000 produits, est-ce que cela va garder en mémoire 100.000 fois le poids de chaque image ? Ou dois-je expréssement ajouter une fonction qui va abandonner au GarbageCollector l'image qui n'est plus affichée (à ma demande) ?

    Comment relâche-t-on une image au Garbage Collector ?
    si par exemple t'utilises la meme variable Image pour afficher qu'une seule image à la fois, là il n y a pas de probleme, le GC va se charger de libérer la mémoire de l'objet dont la référence vient d'être ecrasée.

    par contre si tu veux afficher 100 000 images à la fois, par exemple sur une JTable, je ne sais pas comment optimiser tout ça

  11. #11
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    Pour l'image située en haut à gauche, je crois qu'il y a pas de soucis pour gérer ça en dynamqiue.
    Je garde en effet une seule instance de ImageIcon, qui est updatée avec l'image rechargée sur le disque dur et repainte à chaque affichage demandé pour un produit donné (partie détail en haut à droite).
    (Je suppose que je ne dis pas de connerie, là).

    Par contre, pour la JTable, ce me semble plus compliqué en effet, mais pas impossible.

    Peut-être que je peux essayer de créer, pour chaque image de produit, une mini-image réduite (au minimum du point de vue poids), stockée dans le même folder que les images plus grandes. Et donc, ma fois, afficher 100.000 petites imagettes de faible poids ne devrait que dans de rares cas être un soucis...

    Qu'en pensez-vous ?

  12. #12
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 748
    Par défaut
    En effet si tu doit gérer 100 000 petites imagettes différentes, ca risque de poser un problème, ceci dit gérer 100 000 éléments même sans imagettes risque déjà d'être beaucoup.

    Je n'ai pas de solution toute faite mais pour décharger un objet Image de la mémoire tu as .flush(); Il faudrait que tu voies dans la documentation de la classe JScrollPane. Je pense quelle doit pouvoir détecter un déplacement et te permettre de savoir quelles images, il faudra charger/décharger.

  13. #13
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    S'il y a moyen de savoir par une méthode si une ligne de la JTable est "visible" à l'écran (càd pas cachée sous un JScrollPane), on peut alors faire aussi un affichage dynamique qui va pêcher les imagettes de la JTable seulement pour les lignes qui sont réellement visibles à l'écran...

    Mais d'une autre part, je me demande si des nombreux accès en lecture au disque dur ne vont pas risquer de ralentir l'application...

    Cela dit, je pense quand même que je vais réaliser ma mini-application d'abord simplement ( = en chargeant tout directement)... Si je ne vois pas de solution simple rapidement, alors je me casserais la tête plus tard pour ce genre de problème...

  14. #14
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 748
    Par défaut
    Ceci dit est il indispensable d'afficher les 100 000 éléments a la fois dans la JTable?

    C'est quand même un nombre énorme : ça me parait un problème de conception de l'interface. Personèlement, je me vois mal rechercher un produit particulier dans une telle liste, est tu sur qu'il n'y a pas moyen de construire l'interface de manière à ce que l'on n'ait pas à ce retrouver avec une liste si monstrueuse?

  15. #15
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    C'est vrai, 100.000 c'est beaucoup, mais j'avais juste envie de penser à faire une mini-application capable de gérer ça aussi...

    Par contre : 100.000 lignes de textes sans images, ça je crois qu'il n'y a pas de soucis ! Avec les mémoires qu'ont les ordinateurs actuels et à venir...


    Je ne ferme pas ce post, car je reviendrai encore certainement avec des questions sur l'élaboration de mon Mini-Product-Browser, avant de le publier pour consultation pour d'autres (faux ?) débutants...
    (Je suis en phase de ré-apprentissage du JAVA après une longue période sans, c'est pas toujours simple ...)

  16. #16
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 914
    Billets dans le blog
    54
    Par défaut
    Il y a d'un cote le probleme de la memoire, mais rien qu'au niveau ergonomique il est tres peu probable qu'un utilisateur humain aille lire les 100.000 reponses, meme si elles sont ecrites de maniere concises dans des petites lignes.

    Quand tu fais une recherche Google, dans un moteur de recherche ou dans une boutique en ligne, tu as generalement 10~20 resultats par page mais tu vas rarement depasser la 10ieme page de recherche pour trouver ce qui t'interesse ; alors imagine devoir aller a la 10.000ieme page manuellement ...

    Tu peux te concentrer sur l'affichage des 10~100 premiers resultats et offrir un bouton "+" qui permet d'afficher le resultat integral de la recherche, en le decoupant, si besoin, en plusieurs pages de maniere a mieux optimiser la gestion de la memoire.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  17. #17
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    C'est une excellente proposition à laquelle je n'avais même pas pensé !!!


    Faire un affichage de (par exemple) maximum 100 lignes dans la JTable, et un bouton "100 précédents" et un bouton "100 suivants".

    Ainsi, jamais de problèmes de mémoire, et on peut ainsi gérer des enregistrements gigantesques !!! J'intégrerais aussi (en plus) un petit champs de recherche portant, lui, sur l'intégralité des enregistrements, bien sûr. Ca, je sais faire aussi, j'avais déjà réalisé un truc du genre dans mon TFE sur la gestion des cochons biologiques.

    Je n'ai pas encore commencé le codage de cette mini-application didactique, mais heureusement que ta proposition arrive maintenant, cher Bouye !!

    Merci.

    (Je commence le codage ce week-end... )

Discussions similaires

  1. [MySQL] Affichage de fiche produit en PHP/SQL
    Par quaresma dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 09/03/2011, 01h48
  2. question jointure fiche produit avec relation
    Par gtraxx dans le forum Langage SQL
    Réponses: 6
    Dernier message: 15/09/2010, 11h42
  3. produits avec images dynamiques
    Par regis3 dans le forum Débuter
    Réponses: 6
    Dernier message: 21/02/2009, 13h14
  4. [WinForms]Lenteur d'affichage formulaire avec image de fond
    Par olixelle dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 06/09/2006, 15h06
  5. [SWING]affichage d'une image
    Par chico_du_33 dans le forum AWT/Swing
    Réponses: 51
    Dernier message: 08/07/2005, 10h55

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