Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Débutant] JMenuBar externe

Problème de débutant 2, le retour

    12 février 2012 à 17:18:02

    Salut à tous !

    Suite à mon autre sujet, j'aimerais poser une autre question, un peu en rapport.
    Et vu que je suis parti dans cette optique d'externaliser mes classes, j'aimerais m'y tenir, mais c'est assez difficile pour moi :s

    Donc j'ai une classe BarreDoutils appelée dans ma classe principale Ardoise (Fenetre dans le tuto). Sauf que l'objet BarreDoutils a des boutons (JMenuItem) qui doivent agir sur un objet Panneau, qui est appelé dans Ardoise comme BarreDoutils .
    J'ai donc mis le constructeur de BarreDoutils avec un objet Jpanel en argument, mais ensuite j'ai des classes abstraites qui ne peuvent pas utiliser cet argument...

    Comment puis-je fait communiquer BarreDoutils et Panneau ?

    PS : je suis peut-être pas très claire et je dis sans doute n'importe quoi dans la mesure ou je commence à peine à intégrer les principes de la POO et que j’apprends surtout en copiant et modifiant, donc désolé par avance et n'hésitez pas à me reprendre^^
    Je met ma classe BarreDoutils en secret :
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    
    import javax.swing.AbstractAction;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JToolBar;
    
    
    
    public class BarreDoutils extends JToolBar{
    
        
        //Création de notre barre d'outils
        
        private RondAction rondAction = 		new RondAction("",  new ImageIcon("images/rond.jpg"));
        private CarreAction carreAction = 		new CarreAction("",  new ImageIcon("images/carre.jpg"));
        private RougeAction rougeAction = 		new RougeAction("",  new ImageIcon("images/rouge.jpg"));
        private VertAction vertAction = 		new VertAction("",  new ImageIcon("images/vert.jpg"));
        private BleuAction bleuAction = 		new BleuAction("",  new ImageIcon("images/bleu.jpg"));
        private EffacerAction effacerAction = 	new EffacerAction("Effacer");
        
        //Les boutons
        private JButton 	effacer = new JButton(effacerAction),
        					rond = new JButton(rondAction),
        					carre = new JButton(carreAction),
        					rouge = new JButton(rougeAction),
        					vert = new JButton(vertAction),
        					bleu = new JButton(bleuAction);
    
        private Color fondBouton = Color.white;
        
        
        public BarreDoutils(Dessin dessin){
        	
        	effacer.setBackground(fondBouton);
        	rond.setBackground(fondBouton);
        	carre.setBackground(fondBouton);
        	rouge.setBackground(fondBouton);
        	vert.setBackground(fondBouton);
        	bleu.setBackground(fondBouton);
        	
        	this.setFont(new Font("Courier", Font.PLAIN, 0));
        	
        	this.add(effacer);
        	this.addSeparator();
        	this.add(rond);
        	this.add(carre);
        	this.addSeparator();
        	this.add(rouge);
        	this.add(vert);
        	this.add(bleu);  
        	choisirForme(dessin, "rond");
        	choisirCouleur(dessin, "rouge");
        }
        
        
        public void choisirForme(Dessin dessin, String str){
        	if (str.equals("rond")){
        		rond.setEnabled(false);
        		carre.setEnabled(true);
        		dessin.setFormeCurseur("rond");
        	}
        	if (str.equals("carre")){
        		rond.setEnabled(true);
        		carre.setEnabled(false);
        		dessin.setFormeCurseur("carre");
        	}
        }
        
        public void choisirCouleur(Dessin dessin, String str){
        	if (str.equals("rouge")){
        		rouge.setEnabled(false);
        		vert.setEnabled(true);
        		bleu.setEnabled(true);
        		dessin.setCouleurCurseur(Color.red);
        	}
        	if (str.equals("bleu")){
        		rouge.setEnabled(true);
        		vert.setEnabled(true);
        		bleu.setEnabled(false);
        		dessin.setCouleurCurseur(Color.blue);
        	}
        	if (str.equals("vert")){
        		rouge.setEnabled(true);
        		vert.setEnabled(false);
        		bleu.setEnabled(true);
        		dessin.setCouleurCurseur(Color.green);
        	}
        }
        
    	class RondAction extends AbstractAction{
    		public RondAction(String name, ImageIcon img){
    			super(name, img);
    		}
    		public void actionPerformed(ActionEvent arg0) {
    			//ici dessin n'est évidemment pas reconnu
    			choisirForme(dessin, "rond");
    		}		
    	}
    	class CarreAction extends AbstractAction{
    		public CarreAction(String name, ImageIcon img){
    			super(name, img);
    		}
    		public void actionPerformed(ActionEvent arg0) {
    			choisirForme(dessin, "carre");
    		}		
    	}
    	class RougeAction extends AbstractAction{
    		public RougeAction(String name, ImageIcon img){
    			super(name, img);
    		}
    		public void actionPerformed(ActionEvent arg0) {
    			choisirCouleur(dessin, "rouge");
    		}		
    	}
    	class VertAction extends AbstractAction{
    		public VertAction(String name, ImageIcon img){
    			super(name, img);
    		}
    		public void actionPerformed(ActionEvent arg0) {
    			choisirCouleur(dessin, "vert");
    		}		
    	}
    	class BleuAction extends AbstractAction{
    		public BleuAction(String name, ImageIcon img){
    			super(name, img);
    		}
    		public void actionPerformed(ActionEvent arg0) {
    			choisirCouleur(dessin, "bleu");
    		}		
    	}
    	class EffacerAction extends AbstractAction{
    		public EffacerAction(String name){
    			super(name);
    		}
    		public void actionPerformed(ActionEvent arg0) {
    			System.out.println("J'efface tout !!");
    		}		
    	}
    }
    


    Merci !
    • Partager sur Facebook
    • Partager sur Twitter
      13 février 2012 à 1:57:07

      Salut :)

      Eh bien j'utilise moi même une barre d'outils dans une classe à part, mais je gère les évènements dans ma fenêtre principale, du coup les deux sont quand même assez liés, mais je pense que c'est pas un problème pour le moment, vaut mieux bien maitriser les différentes façons de faire avant, sinon je t'assure que tu vas avoir des migraines comme moi xD

      Donc voici ce que je fais :

      /*
         * Création de la barre d'outils, et des écouteurs correspondants
         */
              toolBar = new ToolBar();
              toolBar.newButton.addActionListener(this);
              toolBar.resetButton.addActionListener(this);
              toolBar.playPauseButton.addActionListener(this);
              toolBar.elementTypeComboBox.addActionListener(this);
              this.getContentPane().add(toolBar,BorderLayout.NORTH);
      


      Je crée ma barre d'outil dans laquelle j'ai 3 boutons et une JComboBox, ensuite je rajoute ma fenêtre (this) comme écouteur pour tous les items, et après je gère ça dans ma fenêtre qui implémente l'interface ActionListener :

      public void actionPerformed(ActionEvent e) {
      		if(e.getSource().equals(toolBar.newButton)){
      
      		}
      		else if(e.getSource().equals(toolBar.resetButton)){
      
      		}
      		else if(e.getSource().equals(toolBar.playPauseButton)){
      
      		}
      		else if(e.getSource().equals(toolBar.elementTypeComboBox)){
      
      		}
      	}
      


      C'est pas forcément la meilleure solution niveau souplesse du code, mais bon pour le moment j'ai d'autres préoccupations ^^
      • Partager sur Facebook
      • Partager sur Twitter
        16 février 2012 à 18:26:47

        Merci de ta réponse !
        Sauf que si j'ai bien compris, mes boutons ne doivent alors pas être en private quand ils sont déclarés dans ma classe BarreDoutil c'est ça ?

        J'ai essayé de contourner ce problème en générant des getters de mes boutons :
        barreDoutils.getEffacer().addActionListener(this);
        mais sans succès, Eclipse me dit que "The method addActionListener(ActionListener) in the type AbstractButton is not applicable for the arguments (Ardoise)" et voudrait faire un cast "actionlistener" sur this (this c'est donc ardoise, comme fenetre dans le tuto)
        • Partager sur Facebook
        • Partager sur Twitter

        [Débutant] JMenuBar externe

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown