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 :

Initialiser une classe passée en paramètre


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Initialiser une classe passée en paramètre
    Bonjour,

    J'ai débuté il y a peu l'apprentissage du Java et je souhaiterai obtenir de l'aide au sujet d'un problème qui m'obsède.

    Tout d'abord, sachez que j'ignore si c'est la bonne méthode à prendre

    En fait, je cherche à un instancier une classe passée en paramètre d'une autre classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Page(new InvoicePage_Add());
    J'ignore si cette méthode est possible (et auquel cas, je me demande comment je peux lancer "new InvoicePage_Add()" depuis ma classe "Page()").

    En bref, le déroulement du système :
    • On clique sur un bouton (comprenant un code similaire au précédent ; seul le nom de la page change)
    • La class Page() est initialisée et ouvre une nouvelle fenêtre personnalisée (couleur de fond commune pour toutes les pages, etc.)
    • La class InvoicePage_Add() est initialisée à son tour et est ajoutée dans la fenêtre de Page()


    Je vous remercie d'avance pour l'aide que vous pourrez m'apporter,
    Florian

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par Crazytox Voir le message
    En fait, je cherche à un instancier une classe passée en paramètre d'une autre classe :
    Non. tu cherches à donner un objet à un autre objet.

    Ton code marche plutôt bien, mais il serait plus pratique de faire :

    En s'arrangeant pour que le constructeur de Page soit du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Page() {
      invoice = new InvoicePage_Add();
    }
    En principe la classe Page devrait s'occuper elle-même d'initialiser son contenu comme ça l'arrange. Il ne faudrait pas que son appelant ait besoin de s'en charger quand il veut appeler son constructeur.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Le problème est que j'ai besoin de charger d'autres contenu depuis mon JMenu.

    Dans mon menu, lorsque je clique sur "Saisir une facture", une nouvelle fenêtre Page() s'ouvre avec la couleur de fond définie etc, et le contenu InvoicePage_Add() s'ajoute. Il en est de même pour "Saisir une commande" : une nouvelle fenêtre Page() s'ouvre et le contenu OrderPage_Add() s'ajoute.

    Le contenu est différent d'un JMenuItem à un autre mais la fenêtre Page(), elle, est toujours identique.

    Je vous remercie d'avance pour l'aide que vous pourrez m'apporter,
    Florian

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Bah dans ce cas ton code il était bien. Tu pourrais aussi faire des sous-classes de Page pour que chacune fasse ce dont elle a besoin, mais si tu débutes, c'est pas vraiment nécessaire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je pense que j'ai du faire une erreur parce que le contenu ne s'affiche pas (tandis que la fenêtre s'ouvre)

    Page.java
    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
    public class Page<T> extends JFrame {
     
        private Panneau panneau = new Panneau();
     
        public Page(){}
     
        public Page(T page) {
            panneau = new Panneau("default");
     
            this.setLocationRelativeTo(null);
            this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
     
            this.setContentPane(panneau);
            this.setVisible(true);
        }
     
    }
    InvoicePage_Add.java
    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
    public class InvoicePage_Add extends JFrame {
     
        private JPanel page_container = new JPanel();
        private JPanel page_content = new JPanel();
     
        public InvoicePage_Add(){
     
            // Window Configuration
            this.setTitle("Saisir une facture");
            this.setSize(400,530);
     
            // General Configuration
            page_container.setLayout(new BorderLayout());
            page_content.setLayout(new SpringLayout());
     
            /* Numéro de la facture*/
            // Label
            JLabel label_num_facture = new JLabel("Numéro de la facture", JLabel.TRAILING);
            page_content.add(label_num_facture);
            // TextField
            JTextField text_num_facture = new JTextField(50);
            label_num_facture.setLabelFor(text_num_facture);
            page_content.add(text_num_facture);
     
            // Layout
            SpringUtilities.makeCompactGrid(page_content, 1, 2, /*rows, cols*/ 6, 6, /*initX, initY*/ 10, 10 /*xPad, yPad*/);
            page_container.add(page_content, BorderLayout.CENTER);
            this.add(page_container);
     
        }
    }
    C'est comme si la fenêtre Page() fonctionnait, mais pas InvoicePage_Add().

    Je vous remercie d'avance pour l'aide que vous pourrez m'apporter,
    Florian

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    On va pas deviner... Il manque le code qui relie l'un et l'autre, là.

    C'est quoi ce nouveau paramètre <T> sur Page ? (Et il sert à quoi, vu que tu fais rien avec ?)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Le Page<T> permet de savoir quel est le type de la classe passée en argument, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    menuitem_saisir_facture.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            new Page<InvoicePage_Add>(new InvoicePage_Add());
        }
    });

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    "savoir" ? Savoir quand ? À quel endroit dans le code cela te sert-il ?
    En l'occurrence,
    - Il n'a aucun effet si la classe ne réutilise pas le type T nulle part ,
    - Tu ne nous avais pas montré de code ressemblant à new Page<InvoicePage_Add>(new InvoicePage_Add()) et sans ces <> dans le constructeur, le <T> n'a pas d'effet utile.

    Il semblerait, vu ton code, que tu ne sais pas pourquoi il y a un <T> là, et donc qu'il n'a rien à faire là.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Quel code me conseilleriez-vous pour obtenir le résultat souhaité ? Je suis perdu..

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Eh bien, il y a beaucoup de choses, mais, on "n'ajoute" pas une page à une autre.

    Ce que tu peux faire, c'est faire des sous-classes de Page, qui feront chacune ce qui lui est propre, et Page, la classe mère, qui s'occupe de ce qui est commun à toutes les pages.
    C'est une organisation classique.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/01/2011, 16h28
  2. Réponses: 4
    Dernier message: 20/05/2006, 17h30
  3. Réponses: 2
    Dernier message: 21/04/2006, 12h09
  4. Réponses: 3
    Dernier message: 01/02/2006, 21h31
  5. [Débutant]Passer une classe abstraite en paramètre
    Par Invité dans le forum Débuter
    Réponses: 2
    Dernier message: 06/01/2006, 17h56

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