[JAVA] Controleur

V3n1 Messages postés 304 Statut Membre -  
V3n1 Messages postés 304 Statut Membre -
Bonjour,

En faite j'essaye en quelques sortes de suivre le modèle MVC pour un projet.
Sauf que j'arrive pas trop gérer l'ajout d'un panel par un ActionListener.

Ci-dessous la description de deux classes :

public class JeuControleur implements ActionListener {

    /**
     * La vue affichant la fenêtre principale
     */
    private FenetrePrincipale vue;

    public JeuControleur(){
        
    }

    public void setVue(FenetrePrincipale vue) {
        this.vue = vue;
    }



    public void actionPerformed(ActionEvent e) {

        String s = e.getActionCommand();

        if(s.equals("Quitter")){
            this.vue.fermer();
            System.exit(1);

        } else if(s.equals("Import des étudiants")) {

           this.vue.removeMonPanel();

            JFileChooser chooser = new JFileChooser(); // Création d'un filechosser
            chooser.setApproveButtonText("Choix du fichier..."); // Nom du bouton
            int returnVal = chooser.showOpenDialog(null); // Affiche la boite de dialogue

            JTable maTable = null;

            if (returnVal == JFileChooser.APPROVE_OPTION){
               File monFichier = chooser.getSelectedFile();
               UtilitaireXLS monTableau = new UtilitaireXLS();

               try {
                    maTable = monTableau.CreerJTableAvecExcel(monFichier);
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(JeuControleur.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(JeuControleur.class.getName()).log(Level.SEVERE, null, ex);
                }

                this.vue.ajoutPanel(this.vue.creerPanelJTable(maTable));
                this.vue.actualiserFenetre();

            }
        }

    }

}


-----------------------------------------

public class FenetrePrincipale extends JFrame{

    /**
     * Controleur qui gère les demandes de l'utilisateur
     */
    private JeuControleur controleur;

    /**
     * Panel qui change d'après les demandes de l'utilisateur
     */
    private JPanel monPanel = new JPanel(new GridBagLayout());


    public FenetrePrincipale(JeuControleur controleur){

         super("Gestion des poursuites d'études");
         this.controleur = controleur;
         this.construitMenu();
         this.construitFenetre();
         this.setSize(1300, 700);
         this.setVisible(true);
         // Arrête l'application à la fermeture de la fenêtre
         this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    }

    public JPanel getMonPanel() {
        return monPanel;
    }



    private void construitFenetre(){

        this.setLayout(new BorderLayout());
        this.creePanelHaut();

        JLabel grosTitre = new JLabel("Gestion poursuites études");

        // Modif de la police du label
        grosTitre.setFont(new Font(Font.SANS_SERIF, Font.ITALIC,32));

        // Ajout des labels au panel
        monPanel.add(grosTitre);

        this.ajoutPanel(monPanel);

    }
    
    
    
   private void creePanelHaut(){
       
       JPanel p = new JPanel(new FlowLayout());
       JLabel titre = new JLabel("IUT de Metz - Département informatique");
       
       p.add(titre);
       this.add(p, BorderLayout.WEST);
       
       
   }

   public void ajoutPanel(JPanel monPanel){

      this.add(monPanel, FlowLayout.CENTER);

   }

   public JPanel creerPanelJTable(JTable maTable){

        JPanel p = new JPanel(new GridBagLayout());

        maTable.revalidate();
        maTable.setFont(new Font(Font.SERIF,Font.PLAIN,10));

        JScrollPane scrollTab = new JScrollPane(maTable);
        scrollTab.setViewportView(maTable);

        p.add(scrollTab);

        return monPanel;

    }

   private void construitMenu(){

     /**
      * Creation de la barre de menu
      */
    JMenuBar barre = new JMenuBar();
    this.setJMenuBar(barre);

     /**
      * Creation des menu, attaché à la barre
      */
     JMenu mFichier = new JMenu("Fichier");
     JMenu mEtudiants = new JMenu("Etudiants");
     JMenu mPoursuites = new JMenu("Poursuites");
     JMenu mAide = new JMenu("Aide");
     barre.add(mFichier);
     barre.add(mEtudiants);
     barre.add(mPoursuites);
     barre.add(mAide);

    /**
     * Creation d'items
     */
    JMenuItem iQuit = new JMenuItem("Quitter");
    //iQuit.addActionListener(this);
    JMenuItem iImport = new JMenuItem("Import des étudiants", KeyEvent.VK_I);
    //iImport.addActionListener(this);

    /**
     * Ajout des items dans les différents menus
     */
    mFichier.add(iQuit);
    mEtudiants.add(iImport);

    /**
     * Ajout du controleur
     */
    iQuit.addActionListener(this.controleur);
    iImport.addActionListener(this.controleur);
    }

   public void removeMonPanel(){
       monPanel.remove(this);
   }

   public void actualiserFenetre(){
       this.repaint();
   }

    public void fermer(){
        this.setVisible(false);
   }
}


--------------------------------------------
    public static void main(String[] args) {
        // TODO code application logic here
    JeuControleur jeu = new JeuControleur();
    FenetrePrincipale vue = new FenetrePrincipale(jeu);
    jeu.setVue(vue);
    }


Pour plus de précision, la gestion du bouton quitter marche parfaitement alors que le bouton Import étudiants ne fonctionne pas.. J'arrive à afficher les noms de mon fichier Excel dans la console, mais je n'arrive pas à ajouter le panel dans la feneêtre principale.

Pourtant, je créer le JTable, ensuite le panel puis j'ai crée une fonction qui ajoute le panel à la fenêtre et je crains que c'est celle-ci qui ne fonctionne pas !

Vous avez des idées ?

Merci d'avance!

A voir également:

1 réponse

V3n1 Messages postés 304 Statut Membre 56
 
Personne?
0