Partage
  • Partager sur Facebook
  • Partager sur Twitter

Communication entre classe

Impossible d'afficher un élément

Sujet résolu
    16 novembre 2014 à 15:37:34

    Bonjour,

    Je rencontre un problème dans le programme ci-dessous.

    Objectif du programme créer une interface représentant un/plusieurs producteurs , un grenier et un/plusieurs consommateurs.
    Le but est de maitriser la gestion des threads et les changement d'état de ceux-ci (producteur à l'arret ou consommateurs en famine si plus rien dans le grenier)

    L'ajout de consommateur et producteurs est dynamique (encore aucune idée de comment faire :D )

    Je dispose d'une classe MainView qui défini l'interface graphique.
    Au sein de cette interface, voudrait faire apparaitre un JPanel contenant un JTextField.

    Le JPanel apparait bien, mais pas le JTextField. Je ne comprend pas pourquoi.

    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package consommateur;
    
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import javax.swing.ImageIcon;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    
    /**
     *
     * @author X
     */
    public class MainView extends JFrame {
        public MainView(){
            /***** Définition JFrame principal ******/
            this.setTitle("Consommateur  VS Producteur");
            this.setMinimumSize(new Dimension(800,500));
            this.setMaximumSize(new Dimension(1100,1000));
            this.setLocationRelativeTo(null);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
                   
            /****** JMenuBar ******/
            JMenuBar MainBar = new JMenuBar();
            JMenu Option = new JMenu("Option");
            Option.setMnemonic(KeyEvent.VK_F);
            ImageIcon IconeExit = new ImageIcon(getClass().getResource("icons/door_out.png")); 
            ImageIcon IconeAddConso = new ImageIcon(getClass().getResource("icons/user_green.png"));
            ImageIcon IconeAddProd = new ImageIcon(getClass().getResource("icons/user_orange.png"));
            
            JMenuItem ExitMenuItem = new JMenuItem("Quitter", IconeExit);
            ExitMenuItem.setMnemonic(KeyEvent.VK_E);
            ExitMenuItem.setToolTipText("Quitter l'application");
            ExitMenuItem.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent event) {
                    System.exit(0);
                }
            });
            
            JMenuItem AddProdMenuItem = new JMenuItem("Ajouter producteur", IconeAddProd);
            AddProdMenuItem.setMnemonic(KeyEvent.VK_P);
            AddProdMenuItem.setToolTipText("Ajouter un producteur");
            AddProdMenuItem.addActionListener(new ActionListener (){
                @Override
                public void actionPerformed(ActionEvent event) {
                    
                }
            });
            
            JMenuItem AddConsoMenuItem = new JMenuItem("Ajouter consommateur", IconeAddConso);
            AddConsoMenuItem.setMnemonic(KeyEvent.VK_C);
            AddConsoMenuItem.setToolTipText("Ajouter un consommateur");
            AddConsoMenuItem.addActionListener(new ActionListener (){
                @Override
                public void actionPerformed(ActionEvent event) {
                    
                }
            });
            
            Option.add(AddProdMenuItem);
            Option.add(AddConsoMenuItem);
            Option.add(ExitMenuItem);
            MainBar.add(Option);   
            this.setJMenuBar(MainBar);
            
            /****** JPanel Racine *******/
            JPanel MainPanel = new JPanel();
            /*** Subdivision du JPanel ***/
            JPanel ProdPanel = new JPanel();
            JPanel GrenierPanel = new JPanel();
            JPanel ConsoPanel = new JPanel();
            
            //FlowLayout experimentLayout = new FlowLayout();
            MainPanel.setLayout(new GridLayout(1,3));
            
            
            ProdPanel.setBackground(Color.red);
            ProdPanel.setVisible(true);
            
            GrenierPanel.setBackground(Color.green);
            GrenierPanel.setLayout(new GridLayout(1,1));
            GrenierView MainGrenier = new GrenierView();
            GrenierPanel.add(MainGrenier);
            GrenierPanel.setVisible(true);
            
            ConsoPanel.setBackground(Color.blue);
            ConsoPanel.setVisible(true);
            
            MainPanel.add(ProdPanel);
            MainPanel.add(GrenierPanel);
            MainPanel.add(ConsoPanel);
            
            this.setContentPane(MainPanel);
         
        }
    }
    
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package consommateur;
    
    import java.awt.Color;
    import java.awt.GridLayout;
    import static java.lang.Integer.toString;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    
    /**
     *
     * @author X
     */
    public class GrenierView extends JPanel {
        private int grenier = 0;
        
        public int getGrenier(){
            return grenier;
        }
        
        public void setGrenier(int stock){
            this.grenier = grenier + stock;
        }
        public GrenierView(){
            JPanel GrenierPanel = new JPanel();
            GrenierPanel.setLayout(new GridLayout(1,1));
            GrenierPanel.setBackground(Color.red);
            //GrenierPanel.setSize(100,100);
            JTextField GrenierTextField = new JTextField();
            GrenierTextField.setColumns(50);
            GrenierTextField.setText(Integer.toString(getGrenier()));
            GrenierPanel.add(GrenierTextField);
            GrenierTextField.setVisible(true);
                   
        }
    }

    Le launcher

    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package consommateur;
    
    /**
     *
     * @author X
     */
    public class Launcher {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            MainView MV = new MainView();
            MV.setVisible(true);
        }
        
    }
    


    Ceci fait partie d'un travail que je dois rendre dans deux semaines.
    Merci de me consacrer un peut de temps pour me guider.


    • Partager sur Facebook
    • Partager sur Twitter
      17 novembre 2014 à 23:49:18

      Personne n'a d´idée? Ou ma demande n'est pas claire?

      merci 

      • Partager sur Facebook
      • Partager sur Twitter
        18 novembre 2014 à 12:07:50

        Bonjour,

        Vous avez juste oublier de le placer dans votre JPanel principal.

            public GrenierView(){
                JPanel GrenierPanel = new JPanel();
                GrenierPanel.setLayout(new GridLayout(1,1));
                GrenierPanel.setBackground(Color.red);
                //GrenierPanel.setSize(100,100);
                JTextField GrenierTextField = new JTextField();
                GrenierTextField.setColumns(50);
                GrenierTextField.setText(Integer.toString(getGrenier()));
                GrenierPanel.add(GrenierTextField);
                GrenierTextField.setVisible(true);
                add(GrenierPanel); //<= ajouter.
            }

        Bonne continuation.

        • Partager sur Facebook
        • Partager sur Twitter
          23 novembre 2014 à 21:00:07

          Merci, ça fonctionne, j'ai une autre question pour le même projet
          http://openclassrooms.com/forum/sujet/probleme-thread-et-communication-entre-classe

          Si vous avez un peu de temps

          • Partager sur Facebook
          • Partager sur Twitter

          Communication entre classe

          × 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