Objets en java [Résolu]

Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
- - Dernière réponse : didoux95
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
- 5 avril 2008 à 14:42
Bonjour à tous.

Est ce que vous savez comment est ce que je peux "contrôler" un objet depuis une autre classe .. ?
En fait j'ai deux classes :
   - Une classe héritant de JFrame.
   - Une autre classe agissant sur la première (c'est une sorte d'option).

Voici une organisation représentant ce que je cherche à faire.

/**
 *La classe correspondant à la fenêtre.
 *
 **/
public class A extends JFrame {
 
 /**
  *Le constructeur de la fenêtre.
  *
  **/
 public A () {
  
 }
 
 /**
  *Pour ajouter une option à la fenêtre.
  *
  [mailto:*@param *@param] Option o L'option à attribuer à la fenêtre.
  *
  **/
 public void addOption (Option o) {
  //Le code permettant d'ajouter l'option (je ne sais pas trop quoi mettre .. d'où ma question xD).
 }
 
}

******************************************************************************************

/**
 *La classe correspondant à l'option que l'on veut ajouter.
 *
 **/
public class B extends Option {
 
 /**
  *Le constructeur de l'option. (Possibilité de lui passé des paramètres, ...).
  *
  **/
 public B () {
  
 }

 //Toutes les méthodes de l'option.
 /**
  *Une méthode d'exemple. Pour définir la taille de la fenêtre.
  *
  **/
 public void setFrameSize (int w, int h) {
  //Le code permettant d'agir sur la fenêtre (mais je ne sais pas quoi .. :( :s  )
 }
 
}

Si vous pouvez m'aider ... :o) 
J'avais pensé à utiliser les évènemenets, mais ca ne fonctionne pas dans mon cas car je voudrais "directement" utiliser l'objet (si l'objet est une fenêtre, il faudrait que les modifications faites par la classe option (B) soient prisent en compte comme si c'était la classe principale qui les faisaient (A)).
merci ..
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
30
3
Merci
Salut:

D'abord, c'est quoi ce Option? une interface? une classe?

public class Option {

    private JFrame frame = null;


    public Option() {}


    public Option(JFrame frame) {

       this.frame = frame;

    }


    public void setFrame(Frame frame) {

       this.frame = frame;

    }  


    public JFrame getFrame() {

       return frame;

    }


    public void setSize(int w, int h) {
       if (frame == null) {
          throw new UnsupportedOperationException("L'objet Option doit être attaché à un objet JFrame");
       }

       frame.setSize(w, h);

    }

}

public class MyFrame extend JFrame {

    // Sauvegarder la liste des options (ça peut être optionel)
    List<Option> options = null;

    public void addOption(Option opt) {
       if (opt != null) {
          if (options == null) {
             options = new ArrayList<Option>();
          }
          options.add(opt);
          opt.setFrame(this);
       }
    }

    // ...

    public List<Option> getOptions() {
       return options;
    }
}

public class Test {
    public static void main(String[] args) {
       MyFrame f = new MyFrame();
       f.setVisible(true);

       Option opt = new Option();

       f.addOption(opt);

       opt.setSize(400, 400);
       // ou bien opt.getFrame().setSize(400, 400);
    }
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
30
3
Merci
Salut:

Dans le cas général il vaut mieux définir une interface.

public interface Contract {
    public void doTaskX();

    public void doTaskY();
}

public class Subject implements Contract {
    public void addMonitor(Monitor monitor) {
       if (monitor != null) {
          monitor.setSubject(this);
        }
    }

    // Implémentation ordinaire
    public void doTaskX() {
       // ...
    }

    public void doTaskY() {

       // ...

    }
}

public class Monitor implements Contract {
    private Subject subject = null;

     public Monitor() {}

    public Monitor(Subject subject ) {
       this.subject = subject ;
    }

    public void setSubject(Subject subject) {
       this.subject = subject ;
    }

    // Implementation :: envelopper les méthodes de la classe Subject

    public void doTaskX() {
       subject.doTaskX();
    }

    public void doTaskY() {

       subject.doTaskY();

    }
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
30
3
Merci
Salut:

Le deuxième cas était juste une illustration du démarche à faire dans le cas général.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
30
0
Merci
Salut:

Est ce que tu veux généraliser le concept de contrôl d'une classe ou bien tu veux juste controller la classe JFrame?
Commenter la réponse de Ombitious_Developper
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
1
0
Merci
Bonjour je voudrais juste controller la classe JFrame (mais je me suis dis que si je maitrisais le contrôle d'une classe "en générale", je pourrais le faire avec n'importe quelle classe; à moins que ce ne soit pas le même chose .. ?)

merci
Commenter la réponse de didoux95
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
1
0
Merci
Slt.
Merci beaucoup. J'ai testé le premier code qui fonctionne (il répond bien aà ce que je désire faire). Par contre lorsque j'ai voulu tester le deuxième. Mais j'vois pas trop comment faire (our lancer une fenêtre avec) . Comment il faut faire .. ?
merci.
Commenter la réponse de didoux95
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
1
0
Merci
Merci :p je comprends, à présent mieux comment il faut faire .. :o)
Commenter la réponse de didoux95