OVH Cloud OVH Cloud

[newbie] JMenuBar, JFrame et JPanel

2 réponses
Avatar
koni
Bonjour,

Comme le mentionne le titre je suis débutant en développement Java. Et
j'ai actuellement un problème avec les composants Swing et leur
manipulation. Je souhaite faire une fenetre contenant un menu.
Chaque menu possède au moins un item.
Le fait de cliquer sur un item aurait comme conséquence de changer le
Panel qui s'affiche dans ma Frame. Problème je n'arrive pas à le faire ...

Une piste ?

Merci
koni

2 réponses

Avatar
jerome moliere
koni wrote:
Bonjour,

Comme le mentionne le titre je suis débutant en développement Java. Et
j'ai actuellement un problème avec les composants Swing et leur
manipulation. Je souhaite faire une fenetre contenant un menu.
Chaque menu possède au moins un item.
Le fait de cliquer sur un item aurait comme conséquence de changer le
Panel qui s'affiche dans ma Frame. Problème je n'arrive pas à le faire ...

Une piste ?
utiliser un carddlayout (metaphore du jeu de cartes) qui est faite pour

cela...
cf tutorial et javadoc pour les details
bon courage
Jerome

--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941

Avatar
koni
jerome moliere wrote:
koni wrote:

Bonjour,

Comme le mentionne le titre je suis débutant en développement Java. Et
j'ai actuellement un problème avec les composants Swing et leur
manipulation. Je souhaite faire une fenetre contenant un menu.
Chaque menu possède au moins un item.
Le fait de cliquer sur un item aurait comme conséquence de changer le
Panel qui s'affiche dans ma Frame. Problème je n'arrive pas à le faire
...

Une piste ?


utiliser un carddlayout (metaphore du jeu de cartes) qui est faite pour
cela...
cf tutorial et javadoc pour les details
bon courage
Jerome



Merci en effet cela résout mon problème. Parcontre je me demande si il
n'y a pas un moyen plus efficace que celui que j'ai trouvé pour faire
connaitre le CardLayout a ma barre de menu. (classe ci dessous). En
effet pour le moment je transmet la référence (la valeur?) du CardLayout
et du Panel dont le layout est CardLayout en signature du constructeur
de la barre de Menu. Je trouve pas çà très élégant d'autant plus que je
dois faire une methode pour que l'écouter puisse agir sur ces objets.


Cordialement,
koni

========================================================================= /*
* Créé le 19 févr. 2004
*
*/
package chrono;

import javax.swing.*;
import java.awt.*;

/**
* @author koni
*
*/
public class GUI extends JFrame{
private CardLayout gestionnaire;
private JPanel panel;

public GUI(String titre) {
//Constructeur
setTitle(titre);
this.setBounds(0,0,800,600);

Container Contenant = this.getContentPane();
JPanel panel = new JPanel();
CardLayout gestionnaire = new CardLayout();
panel.setLayout(gestionnaire);
setJMenuBar(new BarreMenu(gestionnaire,panel));
// Creation Panneau Tache
JPanel panneauTache = new JPanel();
panneauTache.setBackground(Color.BLUE);
panel.add(panneauTache, "tache");
// Creation Panneau Projet
JPanel panneauProjet = new JPanel();
panneauProjet.setBackground(Color.RED);
panel.add(panneauProjet, "projet");

// Creation Panneau Journee
JPanel panneauJournee = new JPanel();
panneauJournee.setBackground(Color.WHITE);
panel.add(panneauJournee,"journee");

Contenant.add(panel);

}

}

========================================================================= package chrono;

import javax.swing.*;
import java.awt.*;
import java.awt.event.* ;

public class BarreMenu extends JMenuBar implements ActionListener
{

private static JMenuItem pajout, pmodif, tajout, jmodif;
private CardLayout gestio;
private JPanel pano;

private void setPanel(CardLayout gest, JPanel panel) {
pano = panel;
gestio = gest;
}

/* Constructeur
*/
public BarreMenu(CardLayout unGestio, JPanel unPanel)
{
JMenu menuProjet = new JMenu("Projet");
setPanel(unGestio, unPanel);
//declaration des éléments du menu
pajout = new JMenuItem("Ajouter");
pmodif = new JMenuItem("Modifier");
// ecouteur d'evenements du menu
pajout.addActionListener(this) ;
pmodif.addActionListener(this) ;

//ajout dans le menu
menuProjet.add(pajout);
menuProjet.add(pmodif);

JMenu menuTache = new JMenu("Tache");
//declaration des éléments du menu
tajout = new JMenuItem("Ajouter");
// ecouteur d'evenements du menu
tajout.addActionListener(this);

//ajout dans le menu
menuTache.add(tajout);

JMenu menuJournee = new JMenu("Journee");
//declaration des éléments du menu
jmodif = new JMenuItem("Modifier");

// ecouteur d'evenements du menu
jmodif.addActionListener(this) ;

//ajout dans le menu
menuJournee.add(jmodif);


// après on ajoute tout à la barre de menu
this.add(menuProjet);
this.add(menuTache);
this.add(menuJournee);
}


public void actionPerformed(ActionEvent e)
/* procedure lancée lorsqu'un evenement se produit
* traitement de cet evenement
*/
{

Object o = e.getSource() ; // On stock l'adresse du référent de
l'objet déclenchant l'action

if( o.equals(pajout))
{
// Ajout d'un projet
// Il faut montrer le panneau adequat
System.out.println("Ajout d un projet");
gestio.show(pano, "projet");

}
else
if (o.equals(pmodif)) {
// Modification des projets
System.out.println("Modification des projets");
//gestio.next(pano);
gestio.show(pano, "projet");
}
else if(o.equals(tajout)) {
// Ajout d'une tache
System.out.println("Ajout d une tache");
//gestio.next(pano);
gestio.show(pano,"tache");
}
else if(o.equals(jmodif)) {
// Modification d'une journee
System.out.println("Modification d une journee");
gestio.show(pano,"journee");
}

}

}
==========================================================================