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 :

une classe pour les dominer tous


Sujet :

avec Java

  1. #1
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut une classe pour les dominer tous
    Bonjour à tous ,j'ai crée les 2 classes ci-dessous :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    public class WheeledStringButton extends JButton implements MouseWheelListener,Observable,Observateur {
     
    	private	Object[]	observateur = {null,null};
    	private	int	index;
    	private	String	mois[] = {"Janvier","Février","Mars","Avril","Mai","Juin",
    			"Juillet","Aout","Septembre","Octobre","Novembre","Décembre"};
     
    	public WheeledStringButton() {
    		super();
    		this.index = 0;
    		addMouseWheelListener(this);
    		observateur[0] = this;
    	}
     
    	public void mouseWheelMoved(MouseWheelEvent e) {
    		// TODO Auto-generated method stub
    		int	count = e.getWheelRotation();
    		int	nb = (count < 0)?-1:1;
    		for(int i=0;i!=count;i+=nb) {
    			index += nb;
    			if(index > (mois.length - 1)) { index = 0; }
    			if(index < 0) { index = mois.length - 1; }
     
    			((Observateur) observateur[0]).setObservateurs(mois[index]);
    			((Observateur) observateur[1]).setObservateurs("1");
    			((Observateur) observateur[1]).setIndex(index);
    		}
    	}
    	public	void	inscription(Object o) {
    		observateur[1] = o;
    	}
    	public	void	setObservateurs(String s) {
    		this.setText(s);
    	}
    	public	int	getMonthIndex() {
    		return index;
    	}
    	public void setIndex(int index) {
    		;
    	}
    }
    et la deuxième ...
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    public class WheeledStringLabel extends JLabel implements MouseWheelListener,Observateur,Observable {
     
    	private	int	index;
    	private	int	jour;
    	private	Object	observateur = null;
    	private	int	jours[] = {31,28,31,30,31,30,31,31,30,31,30,31};
     
    	public WheeledStringLabel() {
    		super();
    		observateur = this;
    		this.index = 0;this.jour = 1;
    		addMouseWheelListener(this);
    		((Observateur) observateur).setObservateurs(Integer.toString(jour));
    	}
    	public WheeledStringLabel(String s) {
    		super(s);
    		observateur = this;
    		this.index = 0;this.jour = 1;
    		addMouseWheelListener(this);
    		((Observateur) observateur).setObservateurs(Integer.toString(jour));
    	}
     
    	public void mouseWheelMoved(MouseWheelEvent e) {
    		// TODO Auto-generated method stub
    		int	count = e.getWheelRotation();
    		int	nb = (count < 0)?-1:1;
    		for(int i=0;i!=count;i+=nb) {
    			jour += nb;
    			if(jour > jours[index]) { jour = 1; }
    			if(jour < 1) { jour = jours[index]; }
     
    			((Observateur) observateur).setObservateurs(Integer.toString(jour));
    		}
    	}
    	public	void	setIndex(int i) {
    		if(i>0 && i<12) { this.index = i;this.jour = 1; }
    	}
     
    	public void setObservateurs(String s) {
    		setText(s);
    	}
     
    	public void inscription(Object o) {
    		;
    	}
    }
    J'aimerais une super classe d'où dériveraient ces 2 classes mais je n'y arrive pas ;j'ai essayé
    la généricité (que je trouve compliquée) ; comment faire ??

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Comme tes deux classes héritent de deux classes différentes, tu ne peux faire une classe unique dont héritent ces deux classes, mais tu peux faire une interface (mettons IWheeledStringComponent) , avec les méthodes en commun (setIndex, inscription, setObservateurs...). Ensuite, comme il s'agit d'un composant Swing, le but c'est qu'on puisse l'ajouter à un conteneur. Directement, c'est faisable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class WheeledStringButton implements IWheeledStringComponent {
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class WheeledStringLabel implements IWheeledStringComponent {
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WheeledStringButton component = new WheeledStringButton();
    IWheeledStringComponent wheeledComponent = component; // pour manipuler la classe par l'interface (par exemple par une méthode machin(IWheeledStringComponent wheeledComponent)
    panel.add(component); // on peut ajouter le composant.
    Si tu veux pouvoir absolument avoir qu'une seule variable pour manipuler ton composant, tu peux procéder :
    • soit par encapsulation dans une classe non Swing, avec une méthode JComponent getComponent() pour récupérer le composant Swing
    • soit par encapsulation dans un JPanel (qui lui implémentera l'interface), qui sert de conteneur du JButton ou du JLabel. D'ailleurs, cette solution pourra te permettre d'inclure tout un tas de composants, et non pas qu'un seul, au besoin


    Une troisième solution peut-être de faire une classe qui implémente uniquement l'interface mais qui peut se positionner comme contrôleur. Il suffit d'ajouter un paramètre à l'interface. Au lieu d'une interface, on peut avantageusement faire une abstraction.

    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
    public abstract class AbstractWheeledStringComponent<T extends JComponent> implements MouseWheelListener,Observable,Observateur {
     
         protected final T component;
         public AbstractWheeledStringComponent(T component) {
             this.component = component;
             this.component.addMouseListener(this);
         }
     
         public	void	inscription(Object o) {
         }
         public abstract void	setObservateurs(String s),
         public	int	getMonthIndex() {
    		return index;
         }
         public void setIndex(int index) {
         }
     
         public abstract void mouseWheelMoved(MouseWheelEvent e) {
    		// TODO Auto-generated method stub
    		int	count = e.getWheelRotation();
    		int	nb = (count < 0)?-1:1;
                  for(int i=0;i!=count;i+=nb) { 
                        mouseWheelMoved(i, count, nb);
                  }
         }
         protected abstract void mouseWheelMoved(int index, int count, int nb);
     
    }
    Et tu fais une implémentation Button et un Label. Tout ce qui est en commun, va dans l'abstraction, tout est ce qui est spécifique dans les implémentation dédiées. Il faut au maximum monter des choses dans l'abstraction, donc éviter d'utiliser les mêmes variables pour faire des choses différentes, mais plutôt traiter ça par la redéfiniiton de méthode (par exemple, dans WheelStringLabel, on utilise jour au lieu d'index : il vaudrait mieux utiliser index de la même façon, ce qui fera que le bloc de la boucle pourra être remontée dans mouseWheelMoved. Si une implémentation concrète à besoin d'utiliser une variable ou une autre, pour représenter la même chose, utiliser une méthode abstrait d'accès, avec une implémentation concrète spécifique qui retourne une variable ou l'autre (par le accesseurs respectifs).

    Ensuite pour l'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Jbutton button = new JButton("...");
    new WheeledStringButton (button);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Grid : Une row pour les remplir tous x)
    Par Arnard dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 04/03/2013, 09h57
  2. Petit probleme avec une class pour les bbcode
    Par chrisl0 dans le forum Langage
    Réponses: 5
    Dernier message: 26/04/2012, 15h29
  3. Créer une classe pour les sous titres d'un site
    Par Jean Sympa dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 19/11/2010, 16h26
  4. Je cherche une classe pour les statistiques
    Par Niki59 dans le forum Langage
    Réponses: 6
    Dernier message: 21/10/2010, 20h36
  5. [DEV] REALbasic, BWPreferencesFile : une classe pour les préférences
    Par gibet_b dans le forum Développement OS X
    Réponses: 0
    Dernier message: 18/09/2007, 14h38

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