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

NetBeans Java Discussion :

[Beans] Intégration d'une propriété image dans l'éditeur


Sujet :

NetBeans Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut [Beans] Intégration d'une propriété image dans l'éditeur
    bonjour,
    je suis entrain d'ecrire un objet basé sur jPanel qui devrait suivre la specification javabean.
    je me confronte à deux problemes:
    une des entrée de l'objet est une image qui se mettrait en arriere plan d'un jPanel.
    j'ai ecrit ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public String getBackGround() {
            return (this.background);
        }      
        public void setBackGround(Graphics g) {
            this.background=background;
            Toolkit kit = Toolkit.getDefaultToolkit();
            Image icone = kit.getImage(background);
            g.drawImage(icone ,0, 0,400 ,400, null);
        }
    l'argument est un string, ce qui est genant si l'image en question ne se trouve pas à la racine du dossier. comment puis je changer cette methode pour qu'elle recoit en entrée un classpath aulieu d'un string?
    une autre entrée est un type d'action à effectuer. il n'y a que 5 types à conciderer. voici ce que j'ai ecrit:
    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
        public String getDisplay(){
            return (this.display);
        }    
        public void setDisplay(){
            this.display=display;
            if(display=="IGES"){
                [...]
            }
            if(display=="STEP"){
                [...]
            }
            if(display=="GEO"){
                [...]
            }
            if(display=="MSH"){
                [...]
            }
            if(display=="SOL"){
                [...]
            }
        }
    ecrit de cette façon, l'utilisateur pourrait entrer une autre String mais evidemment ca ne ferait aucune action. comment pourrais je faire pour qu'il ne puisse choisir que parmis les 5 types cités. autrement dit, l'utilisateur ne saisit plus l'argument mais le choisit entre les 5 dispo.
    merci

  2. #2
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour,
    Citation Envoyé par einstein84
    qui devrait suivre la specification javabean
    Franchement, je ne vois pas comment tes getters et setters suivent la spécification JavaBeans :
    - getBackGround retourne une String tandis que le setter prend un Graaphics comme paramètre.
    - getDisplay retourne une String tandis que setDisplay ne prend aucun paramètre ...

    Bref, ton problème n'est pas du tout clair, toute explication supplémentaire serait la bienvenue !

    Sinon, en ce qui concerne le problème du classpath, tu peux le contourner en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread.curentThread().getContextClassLoader().getResourceAsStream(...);
    par exemple.

    Bonne chance.

    P.S. : On ne le répètera jamais assez : ne pas comprer les Strings avec == mais plutôt via equals !
    x=="YYY"
    "YYY".equals(x)

  3. #3
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut
    bonsoir,
    Franchement, je ne vois pas comment tes getters et setters suivent la spécification JavaBeans :
    - getBackGround retourne une String tandis que le setter prend un Graaphics comme paramètre.
    - getDisplay retourne une String tandis que setDisplay ne prend aucun paramètre ...
    en effet, y a un probleme. j'ai modifié la premiere methode de cette facon:
    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
        public InputStream getBackGround() {
            return (this.background);
        }
     
        public void setBackGround(InputStream background) {
            this.background=background;
            Toolkit kit = Toolkit.getDefaultToolkit();
     
            BufferedReader br = new BufferedReader(new InputStreamReader(background));
            try{
                backgrounds= br.readLine();
            }catch(IOException e){         
            }
            Image bg = kit.createImage(backgrounds);
            g.drawImage(bg ,0, 0,this.getSize().width ,this.getSize().height, null);
        }
    mais ça n'est tjrs pas ça. en compilant le jar et 'important dans la palette, j ne peux pas definir un classpath pour l'arriere plan mais juste un custom code.
    le deuxieme:
    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
        public String getDisplay(){
            return (this.display);
        }    
        public void setDisplay(String display){
            this.display=display;
            if("IGES".equals(display)){
     
            }
            if("STEP".equals(display)){
     
            }
            if("GEO".equals(display)){
     
            }
            if("MSH".equals(display)){
     
            }
            if("SOL".equals(display)){
     
            }
        }
    dans celui là j'avais oulié l'indice String.
    ton problème n'est pas du tout clair, toute explication supplémentaire serait la bienvenue !
    dans le cas general, lorque j'aurais compilé mon objet et l'aurais introduit dans la palette, je voudrais avoir la main pour la premiere methode afin de browser le DD à la recherche de l'image. quand à la deuxieme methode, je veux que l'utilisateur n'ait le choix qu'entre les 5 possibilités citées (avec un combobox par exemple), c'est pas à lui d'ecrire ce qu'il veut, mais uniquement choisir entre ce qui est present.

  4. #4
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut
    je precise:
    je veux en appuyant sur background, que ça se comporte comme "icon" pour un jLabel: ça lance un popup ou je peux naviguer à la recherche de mon fichier.
    je veux en appuyant sur display, que ça se comporte comme "accessible parent" en me proposant uniquement la liste des choix disponibles.

  5. #5
    Membre éclairé Avatar de ABN84
    Inscrit en
    Octobre 2007
    Messages
    410
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2007
    Messages : 410
    Par défaut
    rien avec ceci non plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public URL getBackGround() {
            return (this.background);
        }      
        public void setBackGround(URL background) {
            this.background=background;
            Toolkit kit = Toolkit.getDefaultToolkit();
            Image bg = kit.createImage(background);
            g.drawImage(bg ,0, 0,this.getSize().width ,this.getSize().height, null);
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread.curentThread().getContextClassLoader().getResourceAsStream(...);
    pourrais tu developper? je ne vois pas vraiment comment l'utiliser.
    merci

  6. #6
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour.
    Cette histoire de ClassLoader sert justement à retrouver une ressource qui se trouve dans le classpath.
    ClassLoader offre comme Class les deux méthodes getREsource et getResourceAsStream.
    Pour récupérer une instance de ClassLoader, tu utilises la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    Ensuite, tu peux faire soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    URL url = cl.getResource("xyz.png");
    pour retrouver l'URL d'une image s'appelant "xyz.png" qui se trouve dans le classpath, ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    InputStream is = cl.getResourceAsStream("xyz.png");
    pour retrouver un InputStream à la place d'une URL.
    Remarques que la solution avec l'URL ne marche pas si tu comptes packager ton application en un jar, alors mieux vaut passer par la seconde méthode pour être paré à tous les cas.

    En regardant la javaDoc de ToolKit, j'ai vu que la méthode createImage ne prend pas directement un InputStream (ou un de ses descendants). Cependant, elle accepte un byte[], ce qui fera l'affaire :Tu pourras facilement lire tout le contenu de l'InputStream dans un byte[].

    Bonne chance.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/02/2007, 09h55
  2. Et pour une deuxième image dans un formulaire ?
    Par Monbasinstinct dans le forum IHM
    Réponses: 4
    Dernier message: 22/09/2006, 15h54
  3. [WebForms][1.1] Comment mettre une colonne image dans un datagrid?
    Par totoche9 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 02/07/2006, 13h49
  4. une nouvelle image dans un Timage stretch
    Par copeau31 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 26/01/2006, 15h00
  5. [VB ou C++] intégration d'une page web dans une application
    Par devmat dans le forum Windows Forms
    Réponses: 5
    Dernier message: 05/10/2005, 15h14

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