Objets en java

Résolu
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 3 avril 2008 à 20:33
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 ..

7 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
4 avril 2008 à 19:12
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);
    }
}
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
4 avril 2008 à 19:21
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();

    }
}
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
5 avril 2008 à 14:14
Salut:

Le deuxième cas était juste une illustration du démarche à faire dans le cas général.
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
4 avril 2008 à 09: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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
4 avril 2008 à 17:53
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
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
5 avril 2008 à 11:33
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.
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
5 avril 2008 à 14:42
Merci :p je comprends, à présent mieux comment il faut faire .. :o)
0
Rejoignez-nous