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

avec Java Discussion :

Eviter de coder en dur


Sujet :

avec Java

  1. #1
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Points : 76
    Points
    76
    Par défaut Eviter de coder en dur
    Bonjour à tous,

    Je suis en train de chasser (enfin d'essayer) tout ce qui peut être code "en dur" dans mon programme.
    J'aurai 2 questions :

    1. J'ai découvert le RessourceBundle, je trouve ça assez pratique. J'ai déjà pu vider pas mal de choses de cette façon. Maintenant, je voudrais arriver à passer des strings que je récupère par le bundle à des classes de mon programmes. En clair, grace à RessourceBundle, je récupère les actions qui sont disponibles, je voudrais qu'ensuite quand l'utilisateur choisit une de ces actions, je puisse lancer la class correspondante. Savez-vous comment je dois m'y prendre ?

    2. De nombreuses classes 'soeurs' (au sens ou elles héritent de la même classe parent) appellent une image de fond (une différentes pour chaque classe). J'aurai aimé pouvoir simplifié mon code en nommant toujours de la même façon, mon image de fond (disons : fond.png) Comment puis-je m'y prendre ? J'avais pensé mettre chaque classe dans un dossier qui appelerait donc à chaque fois le fichier fond.png contenu dans ce dossier, mais je ne sais pas m'y prendre (à chaque fois je passe par le chemin depuis mon /src).
    Je me dis qu'il dois y avoir moyen d'appeler l'image par une sorte de getClass()+fond.png et appeler mes images class1fond.png, class2fond.png, etc... mais là encore je ne sais pas comment m'y prendre.
    Quelqu'un connait-il le truc ?

    D'avance merci !
    Le GridBagLayout est mon ami ! (mais si, mais si...)

  2. #2
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Citation Envoyé par firgon Voir le message
    Bonjour à tous,

    Je suis en train de chasser (enfin d'essayer) tout ce qui peut être code "en dur" dans mon programme.
    J'aurai 2 questions :

    1. J'ai découvert le RessourceBundle, je trouve ça assez pratique. J'ai déjà pu vider pas mal de choses de cette façon. Maintenant, je voudrais arriver à passer des strings que je récupère par le bundle à des classes de mon programmes. En clair, grace à RessourceBundle, je récupère les actions qui sont disponibles, je voudrais qu'ensuite quand l'utilisateur choisit une de ces actions, je puisse lancer la class correspondante. Savez-vous comment je dois m'y prendre ?

    2. De nombreuses classes 'soeurs' (au sens ou elles héritent de la même classe parent) appellent une image de fond (une différentes pour chaque classe). J'aurai aimé pouvoir simplifié mon code en nommant toujours de la même façon, mon image de fond (disons : fond.png) Comment puis-je m'y prendre ? J'avais pensé mettre chaque classe dans un dossier qui appelerait donc à chaque fois le fichier fond.png contenu dans ce dossier, mais je ne sais pas m'y prendre (à chaque fois je passe par le chemin depuis mon /src).
    Je me dis qu'il dois y avoir moyen d'appeler l'image par une sorte de getClass()+fond.png et appeler mes images class1fond.png, class2fond.png, etc... mais là encore je ne sais pas comment m'y prendre.
    Quelqu'un connait-il le truc ?

    D'avance merci !
    1/ je ne comprends pas ta question peux tu préciser ?

    2/ Si les classes soeurs (qui héritent du même parent ) utilise la même image de fond : pourquoi ne pas définir l'image de fond au niveau du parent ?
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

  3. #3
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    Moi non plus je ne comprends pas trop ta première question. ResourceBundle permet d'externaliser des chaines de caractères. Pourquoi parle tu d'actions ?

    Pour ta seconde question ne serait-ce pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TaClasse.class.getResource("fond.png");

  4. #4
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Pour la première question, idem que mes petits camarades, j'ai pas bien compris.

    Pour la deuxième, il faut que tu stockes tes images dans le classpath. Tu pourras ensuite y accéder via le classLoader.
    Pour que chaque classe appelle de manière transparente une image de fond différente, il faudrait que tu ajoutes une méthode abstraite au niveau de ta classe parente qui permettrait de récupérer une image.

    Cette méthode pourrait d'appeler : par exemple.

    Chaque sous classe définirait l'implémentation permettant d'accéder à l'image correspondante à la classe courante.

    Tu pourrais faire encore mieux en travaillant avec le type abstrait. Mais un peu plus compliqué.

    En espérant que cela t'aidera...
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  5. #5
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par firgon Voir le message
    1. J'ai découvert le RessourceBundle, je trouve ça assez pratique. J'ai déjà pu vider pas mal de choses de cette façon. Maintenant, je voudrais arriver à passer des strings que je récupère par le bundle à des classes de mon programmes. En clair, grace à RessourceBundle, je récupère les actions qui sont disponibles, je voudrais qu'ensuite quand l'utilisateur choisit une de ces actions, je puisse lancer la class correspondante. Savez-vous comment je dois m'y prendre ?
    Ok, je m'explique : je réalise une interface censé proposer un certains nombre de jeux, je me sers du RessourceBundle pour stocker les noms des jeux disponibles (ainsi que le nombres de joueurs, le type de parties, les fichiers sons utilisées, etc...) mais l'appel de la classe du jeu se fait "en dur" du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (nomdujeu.equals("morpion")) jeu = new Morpion()
    J'aurai aimé pouvoir appeler Morpion sans le coder "en dur" peut-être en stockant un chemin d'accès ou quelque chose de ce genre dans le RessourceBundle, mais je ne sais pas si c'est possible.
    Le GridBagLayout est mon ami ! (mais si, mais si...)

  6. #6
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par miloux32 Voir le message
    2/ Si les classes soeurs (qui héritent du même parent ) utilise la même image de fond : pourquoi ne pas définir l'image de fond au niveau du parent ?
    Non, non, chaque classe à une image de fond différente.

    Citation Envoyé par visiwi Voir le message
    Salut,
    Pour ta seconde question ne serait-ce pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TaClasse.class.getResource("fond.png");
    Mais dans ces cas là est-ce que chaque classe aura bien un fond.png différent?

    Citation Envoyé par fabszn Voir le message
    Hello,

    Pour la deuxième, il faut que tu stockes tes images dans le classpath. Tu pourras ensuite y accéder via le classLoader.
    Pour que chaque classe appelle de manière transparente une image de fond différente, il faudrait que tu ajoutes une méthode abstraite au niveau de ta classe parente qui permettrait de récupérer une image.

    Cette méthode pourrait d'appeler : par exemple.

    Chaque sous classe définirait l'implémentation permettant d'accéder à l'image correspondante à la classe courante.

    Tu pourrais faire encore mieux en travaillant avec le type abstrait. Mais un peu plus compliqué.

    En espérant que cela t'aidera...
    Mince, je vais peut-être rester avec mon chemin entier et différent (tant pis) pour chaque classe. Je pensais qu'il serait possible (et peut-être facile) de dire dans la même manière dans chaque classe, va chercher l'image fond.png qui se trouve dans le même dossier que toi, et ainsi en mettant une classe par dossier (et divers autres bricoles) arriver simplement à faire en sorte que dans chaque classe l'appel du fond.png se fasse de la même manière.

    merci à vous tout de même pour vos réponses.
    Le GridBagLayout est mon ami ! (mais si, mais si...)

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Citation Envoyé par firgon Voir le message
    Ok, je m'explique : je réalise une interface censé proposer un certains nombre de jeux, je me sers du RessourceBundle pour stocker les noms des jeux disponibles (ainsi que le nombres de joueurs, le type de parties, les fichiers sons utilisées, etc...) mais l'appel de la classe du jeu se fait "en dur" du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (nomdujeu.equals("morpion")) jeu = new Morpion()
    J'aurai aimé pouvoir appeler Morpion sans le coder "en dur" peut-être en stockant un chemin d'accès ou quelque chose de ce genre dans le RessourceBundle, mais je ne sais pas si c'est possible.
    Il te faut tout simplement utiliser la reflection. Va lire la java doc de la classe java.lang.Class.
    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

  8. #8
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Points : 76
    Points
    76
    Par défaut
    merci j'y cours !

    EDIT 2h plus tard

    Oui, merci c'est exactement ce que je cherche :
    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
    try {
    			System.out.println(Tectonic.class.getName());
    			Class <?> jeuchoisi = Class.forName(clazz);
    			Constructor constr = jeuchoisi. getConstructor(new Class [] {Integer.class,Client.class,Fenetre.class});
    			joueJeu = (Jeu)constr.newInstance(new Object[] {_f.getTable(),_client,_f});
     
    			} catch (ClassNotFoundException e) {
    				e.printStackTrace();
    			}	catch (SecurityException e) {
    				e.printStackTrace();
    			} catch (NoSuchMethodException e) {
    				e.printStackTrace();
    			} catch (IllegalArgumentException e) {
    				e.printStackTrace();
    			} catch (InstantiationException e) {
    				e.printStackTrace();
    			} catch (IllegalAccessException e) {
    				e.printStackTrace();
    			} catch (InvocationTargetException e) {
    				e.printStackTrace();
    			}
    mais pour l'instant ça me renvoie une erreur (method non trouvée)
    alors même que le constructeur est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Tectonic extends Jeu {
     
    /**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	public Tectonic (int table, Client c, Fenetre f)
    	{...
    mais je vais y arriver !!!

    Reste ma deuxième question, dont je sens une réponse dans le même genre...

    En tout cas super pour la première réponse !
    Le GridBagLayout est mon ami ! (mais si, mais si...)

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Et si tu essaies int.class au lieu de Integer.class dans la signature du contructeur ?
    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

  10. #10
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Points : 76
    Points
    76
    Par défaut
    C'était ça !!

    merci bien

    Je pars réviser les différences entre int et Integer
    Le GridBagLayout est mon ami ! (mais si, mais si...)

Discussions similaires

  1. [Matériel] coder sur disque dur SSD ou classique (mécanique)
    Par anizlewan dans le forum Apple
    Réponses: 1
    Dernier message: 17/06/2015, 20h39
  2. comment coder une source htm en "dur" dans une pageproducer
    Par ebase dans le forum Web & réseau
    Réponses: 1
    Dernier message: 22/11/2011, 18h31
  3. Eviter de mettre en dur
    Par billy78 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 06/11/2007, 18h52
  4. Réponses: 2
    Dernier message: 31/05/2007, 13h37
  5. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21

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