Objets en java [Résolu]

Signaler
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
-
didoux95
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
-
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 ..

7 réponses

Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
34
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);
    }
}
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
34
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();

    }
}
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
34
Salut:

Le deuxième cas était juste une illustration du démarche à faire dans le cas général.
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
34
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?
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
1
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
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
1
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.
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
1
Merci :p je comprends, à présent mieux comment il faut faire .. :o)