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 :

Méthode avec composants sur plusieurs classes


Sujet :

avec Java

  1. #1
    Membre du Club
    Femme Profil pro
    Developpeur
    Inscrit en
    Février 2010
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Février 2010
    Messages : 101
    Points : 68
    Points
    68
    Par défaut Méthode avec composants sur plusieurs classes
    Bonjour,

    J'ai un petit soucis en Java/methodologie.
    J'ai 2 jPanel dans lesquelles j'ai une partie des methodes identiques avec des composants portant les memes noms. Je voudrais mettre les methodes identique sur une classe differente pour n'avoir qu'une seule méthode d'écrite et donc eviter toute erreur, mais les methodes ne vont pas toucher les memes composants meme s'ils ont le meme nom dans les 2 jPanel.
    Je ne sais pas comment proceder autrement :

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    public class Initialize {
    	public static JFrame mainFrame = null;
    	public static JPanel jPanel2;
    	public static JPanel jPanel4;
    	public static JTabbedPane jTabbedPane1;
     
    		public Initialize() {
     
    	        mainFrame = new JFrame("Programme");
    	        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	        mainFrame.setMinimumSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height));
    	        mainFrame.setPreferredSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height));
    	        mainFrame.setVisible(true);
     
    			jTabbedPane1 = new javax.swing.JTabbedPane();
    	        jTabbedPane1.setPreferredSize(mainFrame.getSize());
     
    	        mainFrame.add(jTabbedPane1);
     
    			//Librairie - ProgLibrary
    	        jTabbedPane1.addTab("Librairie", getJPanel2());
    			//Programmation - ProgScenario
    			jTabbedPane1.addTab("Programmation", getJPanel4());
     
    		}
     
    		/**
             * Page de programmation des librairies
             */
     
    	public static JPanel getJPanel2() {
    		// TODO Auto-generated method stub  
    			int debutDecomp = 50;
    			jPanel2 = new JPanel();
    			jPanel2.setLayout(new GroupLayout());
     
    			//Affiche la couleur
    			jPanel2.add(PourScenario.getJlabelColorise(jPanel2), new Constraints(new Leading(500, 10, 10), new Leading(debutDecomp+380, 12, 12)));
     
    		return jPanel2;
    	}
     
    			/**
             * Page de programmation des scenarios
             */
     
    	public static JPanel getJPanel4() {
    		// TODO Auto-generated method stub  
    			int debutDecomp = 40;
    			jPanel4 = new JPanel();
    			jPanel4.setLayout(new GroupLayout());
     
    			//Affiche la couleur
    			jPanel4.add(PourScenario.getJlabelColorise(jPanel4), new Constraints(new Leading(500, 10, 10), new Leading(debutDecomp+380, 12, 12)));
     
    		return jPanel4;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class PourScenario {
     
    	// Visualisation de la couleur en grand
        public static JButton getJlabelColorise(JPanel jPanel) {
        	jPanel.labelColorise = new JButton("   ");
        	jPanel.labelColorise.setPreferredSize(new Dimension(100, 100));
        	jPanel.labelColorise.setVisible(false);
    		return jPanel.labelColorise;
    	}
    Mes labelColorise sont declarés en public static dans les classes dédiées à chaque jPanel pour y revenir dessus et changer leur couleur et/ou rentre visible ou non.

    Je sais que des variables globales c'est pas génial, mais comment faire autrement ?

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Points : 276
    Points
    276
    Par défaut
    Bonjour,

    Je dirais d'instinct que les classes abstraites sont la solution.

    Tu crées une classe abstraite contenant les méthodes communes, puis deux classes héritant de cette classe qui implémenteront les comportements spécifiques.

    P.S. : Je me demande si juste le faite de créer une classe spécifique unique contenant le traitement, et de l'instancier en lui passant les composant nécessaire ne suffirait pas, si un grand maitre passe par la, je suis preneur de son avis

    Bonne journée.
    MigouW

    La seule bataille perdue d'avance est celle que l'on refuse de livrer.


    Pensez au tag
    Ma réponse vous a été utile, votez plus 1 sur le message.
    Ma réponse est hors sujet, votez moins 1 sur le message.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 119
    Points : 191
    Points
    191
    Par défaut
    Citation Envoyé par MigouW Voir le message
    Bonjour,

    Je dirais d'instinct que les classes abstraites sont la solution.

    Tu crées une classe abstraite contenant les méthodes communes, puis deux classes héritant de cette classe qui implémenteront les comportements spécifiques.
    C'est aussi la solution que j'aurais donné

    Citation Envoyé par MigouW Voir le message
    P.S. : Je me demande si juste le faite de créer une classe spécifique unique contenant le traitement, et de l'instancier en lui passant les composant nécessaire ne suffirait pas, si un grand maitre passe par la, je suis preneur de son avis

    Bonne journée.
    Selon moi il n'y a pas de raison que ça ne fonctionne pas, mais ça me parait un peu crade comme solution
    On apprend plus en répondant aux questions qu'en les posant.

  4. #4
    Membre du Club
    Femme Profil pro
    Developpeur
    Inscrit en
    Février 2010
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Février 2010
    Messages : 101
    Points : 68
    Points
    68
    Par défaut
    Ok

    Quand il y a des setter/getter, comment je fais ?
    Avec un commun, je risque pas d'avoir de méli mélo entre les 2 jPanel ?

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 119
    Points : 191
    Points
    191
    Par défaut
    Non si c'est bien fait t'auras aucun problème.

    Exemple typique :

    La classe mère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public abstract class Maman
    {
       protected int toto  ;
     
     
       public int getToto()
       {
         return toto ;
       }
     
     
    }
    Les classes filles :
    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 Fifille1 extends Maman
    {
       public Fifille1()
       {
          this.toto = 1 ;
       }
    }
     
     
    public class Fifille2 extends Maman
    {
       public Fifille2()
       {
          this.toto = 2 ;
       }
    }
    Dans ce cas là, si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Fifille1 laFifille1 = new Fifille1() ;
    Fifille2 laFifille2 = new Fifille2() ;
     
    System.out.println("Réponse 1 = " + laFifille1.getToto()) ;
    System.out.println("Réponse 2 = " + laFifille2.getToto()) ;
    Tu obtiendras en sortie
    Réponse 1 = 1
    Réponse 2 = 2

    En bref le getter/setter agit sur l'objet instancié donc ça ne change rien que les deux objets aient la même classe mère
    On apprend plus en répondant aux questions qu'en les posant.

  6. #6
    Membre du Club
    Femme Profil pro
    Developpeur
    Inscrit en
    Février 2010
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Février 2010
    Messages : 101
    Points : 68
    Points
    68
    Par défaut
    Ok

    Je voudrais faire 2 jPanel dans une jTabbedPane, les 2 panels ont plus de 100 composants chacun mais 1 dizaines seront differents et/ou auronts des actions legerements différentes. Pour tester la methodologie à mettre en place, j'ai fait court, voici ma mere :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    import java.awt.Dimension;
     
    import javax.swing.JButton;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
    import org.dyno.visual.swing.layouts.Constraints;
    import org.dyno.visual.swing.layouts.GroupLayout;
    import org.dyno.visual.swing.layouts.Leading;
     
    public class PourScenario2 {
     
    	public static JPanel jPanel;
    	public static JButton button1;
    	public static JButton button2;
    	public static JTextField jTextFieldTotal;
     
    	public JPanel crééjPanel(){
    		jPanel = new JPanel();
    		jPanel.setLayout(new GroupLayout());
     
    		jPanel.add(getJTextFieldTotal(), new Constraints(new Leading(400, 10, 10), new Leading(100, 12, 12)));
    		jPanel.add(getJButton1(), new Constraints(new Leading(300, 10, 10), new Leading(200, 12, 12)));
    		jPanel.add(getJButton2(), new Constraints(new Leading(500, 10, 10), new Leading(200, 12, 12)));
     
    		return jPanel; 
     
    	}
     
    	public static JButton getJButton1() {
    			button1 = new JButton();
    			button1.setText("Ajout 1");
    			button1.setPreferredSize(new Dimension(85, 25));
    			button1.setName("Button1");
    			button1.setVisible (true);
     
    			button1.addMouseListener(new java.awt.event.MouseAdapter() {
    				public void mouseClicked(java.awt.event.MouseEvent e) {
    					int valeur = Integer.parseInt(jTextFieldTotal.getText());
    					jTextFieldTotal.setText(Integer.toString(valeur + 1));
    				}
    			});
    		return button1;
    	}
     
    	public static JButton getJButton2() {
    			button2 = new JButton();
    			button2.setText("Ajout 2");
    			button2.setPreferredSize(new Dimension(85, 25));
    			button2.setName("Button2");
    			button2.setVisible (true);
     
    			button2.addMouseListener(new java.awt.event.MouseAdapter() {
    				public void mouseClicked(java.awt.event.MouseEvent e) {
    					int valeur = Integer.parseInt(jTextFieldTotal.getText());
    					jTextFieldTotal.setText(Integer.toString(valeur + 2));
    				}
    			});
    		return button2;
    	}
     
    	public static JTextField getJTextFieldTotal() {
    		jTextFieldTotal = new JTextField();
    		jTextFieldTotal.setPreferredSize(new Dimension(200, 20));
    		jTextFieldTotal.setVisible(true);
    		jTextFieldTotal.setText("0");
     
    		return jTextFieldTotal;
    	}
     
     
    }
    que j'applique pour l'instant, juste comme ca :
    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
    public Initialize() {
     
    	        mainFrame = new JFrame("Simul");
    	        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	        mainFrame.setMinimumSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height));
    	        mainFrame.setPreferredSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height));
    	        mainFrame.setVisible(true);
     
    			jTabbedPane1 = new javax.swing.JTabbedPane();
    	        jTabbedPane1.setPreferredSize(mainFrame.getSize());
     
    	        mainFrame.add(jTabbedPane1);
     
    			ProgLibrary3 ProgLibrary3 = new ProgLibrary3();
    			jTabbedPane1.addTab("Library 3", ProgLibrary3.crééjPanel());
    			ProgLibrary4 ProgLibrary4 = new ProgLibrary4();
    			jTabbedPane1.addTab("Library 4", ProgLibrary4.crééjPanel());
     
    		}
     
    public  static  class ProgLibrary3 extends PourScenario2 {
    	}
     
    public static class ProgLibrary4 extends PourScenario2 {
    	}
    le probleme c'est que lorsque je clique sur les boutons de ProgLibrary3, ca me fait l'addition dans ProgLibrary4 alors que lorsque je clique dans ProgLibrary4, ca me fait bien l'addition dans ProgLibrary4... Qu'est ce qui cloche ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    Points : 25
    Points
    25
    Par défaut
    La grosse erreur, c'est que les attributs de ta classe sont static !
    Donc, il seront partagés entre toutes les instances de ta classe.

    Il faut donc que tu supprimes le mot clé static, non seulement dans tes attributs, mais aussi dans les méthodes qui les définissent.

    Je te suggère aussi de réviser un peu ces notions de static, ca te remettra les idées en place sur le sujet. Je pourrai te faire un topo sur le chat à l'occasion.

  8. #8
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Points : 276
    Points
    276
    Par défaut
    Il a raison, ca vient de tes static
    MigouW

    La seule bataille perdue d'avance est celle que l'on refuse de livrer.


    Pensez au tag
    Ma réponse vous a été utile, votez plus 1 sur le message.
    Ma réponse est hors sujet, votez moins 1 sur le message.

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 119
    Points : 191
    Points
    191
    Par défaut
    Pour compléter, je te conseillerais d'utiliser des "protected" comme dans mon exemple, plutot que des public.
    Pour faire simple c'est un private qui peut être hérité.

    M'enfin ensuite ça dépend de chacun, moi je suis contre les attributs public, c'est le mal
    On apprend plus en répondant aux questions qu'en les posant.

Discussions similaires

  1. [Conception] Héritage sur Plusieurs classes abstraites
    Par facilus68 dans le forum Langage
    Réponses: 9
    Dernier message: 20/03/2009, 13h06
  2. [Avis] Vue avec union sur plusieurs tables
    Par adiGuba dans le forum Langage SQL
    Réponses: 0
    Dernier message: 22/09/2008, 11h50
  3. un menu géré avec javascript sur plusieurs niveaux (logique)
    Par polothentik dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/07/2008, 14h23
  4. Jointure avec conditions sur plusieurs colonnes
    Par ben53 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 28/11/2005, 09h27
  5. Recherche d'un mot avec LIKE sur plusieurs champs
    Par reynhart dans le forum Langage SQL
    Réponses: 16
    Dernier message: 26/11/2004, 17h41

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