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

Langage Java Discussion :

[Language] pb d'heritage / constructeur


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 36
    Points : 20
    Points
    20
    Par défaut [Language] pb d'heritage / constructeur
    Bonjour a tous.
    J'ai commencé a codé un editeur de figures geometriques.
    Au depart j'avais tout fait dans une seule classe, celle qui contient le main et ca marchait.
    J'ai voulu decouper le probleme en differentes classes:

    classe application qui construit et affiche l'interface graphique:
    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
    class Application {
     
    	public Application() {
     
    	        JFrame frame = new JFrame("Java Paint");
    		JPanel panel = new JPanel();
    		frame.getContentPane().add(panel, "Center");
     
    		ActionListener listener = new MenuItemActionListener(panel);
     
    		JMenu fichier = new JMenu("Fichier");
    		fichier.setMnemonic('F');
    		fichier.add(menuItem("Charger une figure", listener, "figure chargee", 'C', KeyEvent.VK_O));
    		fichier.add(menuItem("Enregistrer une figure", listener, "figure enregistree", 'E', KeyEvent.VK_S));
     
    		JMenu edition = new JMenu("Edition");
    		edition.setMnemonic('E');
     
    		JMenu sousMenu = new JMenu("Créer un objet");
    		sousMenu.add(menuItem("Segment", listener, "segment", 0, 0));
    		sousMenu.add(menuItem("Droite", listener, "droite", 0, 0));
     
    		edition.add(sousMenu);
    		edition.add(menuItem("Historique des objets créés", listener, "historique", 'H', KeyEvent.VK_H));
    		edition.add(menuItem("Supprimer un objet de l'historique", listener, "supp objet histo", 'S', KeyEvent.VK_D));
    		edition.add(menuItem("Supprimer le dernier objet créé", listener, "supp dernier objet", 'D', KeyEvent.VK_L));
     
    		JMenu affichage = new JMenu("Affichage");
    		affichage.setMnemonic('A');
    		affichage.add(menuItem("Zoomer", listener, "zoom", 'Z',0));
    		affichage.add(menuItem("Dezoomer", listener, "dezoom", 'D',0));
     
    		JMenuBar menubar = new JMenuBar();
    		menubar.add(fichier);
    		menubar.add(edition);
    		menubar.add(affichage);
     
    		frame.setJMenuBar(menubar); 
     
    		frame.setSize(450, 300);
    		frame.setVisible(true);
    	}
     
    }
    la classe MenuItemActionListener:
    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
    class MenuItemActionListener implements ActionListener {
     
        Component parent;
     
        public MenuItemActionListener(Component parent) { this.parent = parent; }
     
        public void actionPerformed(ActionEvent e) {
        JMenuItem item = (JMenuItem) e.getSource();
    	    if (item.getText() == "Segment")
    		    JOptionPane.showMessageDialog(parent,"je desseine un segment");
    	    else {
    		    String cmd = item.getActionCommand();
    		    JOptionPane.showMessageDialog(parent, cmd + " was selected.");
    	    }
        }
     
     
         public static JMenuItem menuItem(String label, ActionListener listener, String command, int mnemonic, int acceleratorKey) {
     
    	     JMenuItem item = new JMenuItem(label);
    	     item.addActionListener(listener);
    	     item.setActionCommand(command);
    	     	if (mnemonic != 0) item.setMnemonic((char) mnemonic);
    		if (acceleratorKey != 0) 
    			item.setAccelerator(KeyStroke.getKeyStroke(acceleratorKey, 
    						 java.awt.Event.CTRL_MASK));
    	    return item;
      }
     
      // A convenience method for creating radio button menu items
         public static JMenuItem radioItem(String label, ActionListener listener, String command, ButtonGroup mutExGroup) {
     
    	      JMenuItem item = new JRadioButtonMenuItem(label);
    	      item.addActionListener(listener);
    	      item.setActionCommand(command);
    	      mutExGroup.add(item);
    	      return item;
      }
    }
    et la classe de test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Test {
     
      public static void main(String[] args) {
     
        Application projet = new Application();    
      }
     
    }
    Comme cela ca ne compile pas (normal), le probleme vient de la classe Application je pense, quand je la fais hériter de MenuItemActionListener cela me met une erreur:

    Application.java:7: cannot find symbol
    symbol : constructor MenuItemActionListener()
    location: class MenuItemActionListener
    public Application() {
    ^
    1 error
    Je ne sais donc pas comment faire pour que ma classe application reconnaisse les methodes de MenuItemActionListener sans la faire heriter.

    merci d'avance

    PS: je suis debutant, ca doit etre un truc tout bete mais je vois pas

  2. #2
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 65
    Points : 74
    Points
    74
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import MenuItemActionListener;
    en début de ta classe Application (si j'ai bien compris ce que tu as écrit à la vitesse où je l'ai survolé )

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Quelques questions betes....

    Tu as fait un package pour tes differentes classes ?

    Lorsque tu as separé tes classes, tu les a mis dans des fichiers differents ?

  4. #4
    Membre confirmé Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Points : 558
    Points
    558
    Par défaut
    si je lis l'erreur, et essaye de la comprendre, il dit qu'il n'arrive pas a trouver le constructeur MenuItemActionListener() mais il n'a jamais dit qu'il ne trouvais pas cette classe.
    Donc l'erreur a mon avis viens du fait que la classe application herite de MenuItemActionListener et que celle classe n'a pas de constructeur sans parametre. Donc deux solutions :
    - ne pas faire heriter la classe Application de MenuItemActionListener
    - ecrire un constructeur public dans la classe MenuItemActionListener

    Si ta classe Application n'arrive pas a trouver la classe MenuItemActionListener, c'est surement un problème d'import (et de nom de package) comme cela a pu etre evoqué

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Tous mes fichiers sont dans le meme package, je suis debutant mais quand meme

    J'ai reussi a trouver une parade, j'ai placé ma methode pour créer les item de menu dans la classe application. Je n'ai pas eu a faire heriter application de MenuItemActionListener ni d'importer cette derniere classe dans application.

    merci a tous Probleme resolu

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/10/2005, 12h50
  2. [Language][Héritage] Erreur à propos du constructeur
    Par zizou771 dans le forum Langage
    Réponses: 4
    Dernier message: 12/09/2005, 16h48
  3. [Language]Constructeur dynamique
    Par s.grenet dans le forum Langage
    Réponses: 4
    Dernier message: 21/03/2005, 13h18
  4. Réponses: 5
    Dernier message: 13/03/2005, 20h51
  5. [C++] Heritage - Probleme constructeur
    Par yanndublanche dans le forum Débuter
    Réponses: 2
    Dernier message: 04/08/2004, 10h17

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