Probleme d'ouverture de fenetre

Signaler
Messages postés
15
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
8 avril 2011
-
Messages postés
90
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
4 février 2009
-
Bonjour à tous,

Voila mon problème je développe une interface graphique en java et je veux ouvrir plusieurs fenêtre(JDesktopPane) dans une fenêtre principale (JFrame).
Pour cela j'ai créer plusieurs classe :
<li>"Fenêtre.java" qui hérite de JFrame pour la création de la fenêtre principale</li><li>"FenetreConteneur.java" qui hérite de JDesktopPane</li><li>"FenetreSecondaire.java" qui hérite de JInternalFrame et qui sert à créer mes fentre secondaire.</li>voici les sources :
"Fenêtre.java"
 public class Fenetre extends JFrame {
    public Fenetre() {
        java.awt.Toolkit kit = java.awt.Toolkit.getDefaultToolkit();
        java.awt.Dimension screenSize = kit.getScreenSize();
        int screenWidth = screenSize.width;
        int screenHeight = screenSize.height;
        this.setSize(screenWidth, screenHeight);
        this.setTitle("DSM+");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);

        this.setJMenuBar(new MenuBar());

        this.getContentPane().add(FenetreConteneur.getInstance());
        this.setVisible(true);
    }
    public static void main(String[] args) {
        Fenetre F1 = new Fenetre();
    }
}
"FenetreConteneur.java"
public class FenetreConteneur extends JDesktopPane {
    private FenetreConteneur() {
        int i = 0;
        this.add(new FenetreSecondaire("Nouveau projet " + i));
        this.setVisible(true);
    }
    public static FenetreConteneur getInstance() {
        if (instance == null) {
            instance = new FenetreConteneur();
        }
        return instance;
    }
    private static FenetreConteneur instance = null;
}

"FenetreSecondaire.java"
public class FenetreSecondaire extends JInternalFrame{ 
    public FenetreSecondaire(String titre) {
        this.setTitle(titre);
        this.setMaximizable(true);
        this.setClosable(true);
        this.setSize(300, 100);
        this.setResizable(true);
        this.setVisible(false);
    }
}

J'ai ensuite créer une classe "MenuBar.java" qui créer ma barre de menu :
public class MenuBar extends JMenuBar {
    JMenuBar menuBar = new JMenuBar();
    JMenu[] option = null;
    String[] optionName = {"Fichier", "Edition", "Affichage"};
    JMenuItem[] MFichier = null;
    String[] Fichier = {"Nouveau projet", "Ouvrir", "Enregistrer", "Enregistrer sous", "Exporter", "Importer", "Fermer"};
    JMenuItem[] MEdition = null;
    String[] Edition = {"Copier", "Couper", "Coller"};
    JMenuItem[] MAffichage = null;
    String[] Affichage = {"Liste d'attribut", "SAT", "MCD", "MLD"};

    public MenuBar() {
        option = new JMenu[optionName.length];
        MFichier = new JMenuItem[Fichier.length];
        MEdition = new JMenuItem[Edition.length];
        MAffichage = new JMenuItem[Affichage.length];
        for (int i = 0; i < optionName.length; i++) {
            menuBar.add(option[i] = new JMenu(optionName[i]));
            if (option[i].getText().equals("Fichier")) {
                for (int j = 0; j < Fichier.length; j++) {
                    if (Fichier[j].equals("Fermer")) {
                        MFichier[j] = new JMenuItem(Fichier[j]);
                        MFichier[j].addActionListener(new Fermer());
                    } else if (Fichier[j].equals("Nouveau projet")) {
                        MFichier[j] = new JMenuItem(Fichier[j]);
                        MFichier[j].addActionListener(new Newprojet());
                    } else {
                        MFichier[j] = new JMenuItem(Fichier[j]);
                    }
                    option[i].add(MFichier[j]);
                }
            }
            if (option[i].getText().equals("Edition")) {
                for (int j = 0; j < Edition.length; j++) {
                    MEdition[j] = new JMenuItem(Edition[j]);
                    option[i].add(MEdition[j]);
                }
            }
            if (option[i].getText().equals("Affichage")) {
                for (int j = 0; j < Affichage.length; j++) {
                    if (Affichage[j].equals("Fermer")) {
                        MAffichage[j] = new JMenuItem(Affichage[j]);
                        MAffichage[j].addActionListener(new ListeAttribut());
                    }
                    MAffichage[j] = new JMenuItem(Affichage[j]);
                    option[i].add(MAffichage[j]);
                }
            }
        }
        this.add(menuBar);
        this.setVisible(true);
    }
}

Ce que j'ai souligner en rouge appelle la classe "Newprojet.java" qui implémente un ActionListener
quand je clique sur Nouveau projet dans fichier de ma barre de menu j'ai une fenetre secondaire qui se lance avec un JTextField et un Jbutton et quand je clique sur le JButton je veux appeller une autre classe "CreateAttribut.java" qui va me créer une autre sous fenetre. Et c'est la que j'ai un probleme c'est que quand je clique sur mon JButton rien ne se passe .

"Newprojet.java"
public class Newprojet implements ActionListener {
    private int i = 0;
    private int x = 0;
    private int y = 0;
    private FenetreSecondaire f;
    private JTextField T1;
    private JButton valider;

    public void InitNewprojet() {
        f.setLocation(x, y);
        f.setSize(300, 100);
        f.setVisible(true);

        JPanel P1 = new JPanel();
        P1.removeAll();
        JLabel label1 = new JLabel("Entrez le nom du projet :");
        T1 = new JTextField("nouveau_projet" + i);
        valider = new JButton("Valider");
        valider.addActionListener(new Attribut());
        P1.add(label1);
        P1.add(T1);
        P1.add(valider);
        P1.revalidate();
        P1.repaint();
        f.getContentPane().add(P1);
    }

    public JTextField getT1() {
        return T1;
    }
    public void actionPerformed(ActionEvent e) {
        i++;
        f = new FenetreSecondaire("Nouveau projet " + i);
        this.InitNewprojet();
        FenetreConteneur.getInstance().add(f);
        Object source = e.getSource();
        if (source == valider) {
            FenetreConteneur.getInstance().add(new FenetreSecondaire(this.getT1().getText()));
            new CreateAttribut(this);
        }
    }
}

"CreateAttribut.java"
public class CreateAttribut implements ActionListener {

    private int x = 0;
    private int y = 0;
    private int i = 0;
    private int y1 = 3;
    private int tail =5;
    FenetreSecondaire Att = null;
    JButton ajouter;
    JButton valider;
    JPanel P1 = new JPanel();
    JPanel P2 = new JPanel();
    JPanel P3 = new JPanel();
    Insets inset;
    JTextField nom;
    JTextField desc;
    Newprojet N;

    public CreateAttribut(Newprojet Nprojet) {
       
        Att.setLocation(x+315, y);
        Att.setSize(700, 200);
        Att.setVisible(true);
        this.N = Nprojet;

        i++;
        P3.setLayout(new BorderLayout());
        P2.setLayout(new BorderLayout());
        P2.add(vbar,BorderLayout.EAST);
        P1.setLayout(new GridBagLayout());
        inset = new Insets(5, tail, 5, 5);

        P1.add(new JLabel("Veuillez insérer vos attribut"),new GridBagConstraints(2, 0, 2, 1, 0, 0,
                GridBagConstraints.WEST, GridBagConstraints.NONE, inset, 0, 0));
        P1.add(new JLabel("Nom :"), new GridBagConstraints(1, 1, 1, 1, 0, 0,
                GridBagConstraints.WEST, GridBagConstraints.NONE, inset, 0, 0));
        P1.add(nom = new JTextField("attribut " + i), new GridBagConstraints(1, 2, 2, 1, 100, 0,
                GridBagConstraints.CENTER, GridBagConstraints.BOTH, inset, 0, 0));

        ajouter = new JButton("Ajouter");
        P1.add(ajouter, new GridBagConstraints(5, 2, 1, 1, 0, 0,
                GridBagConstraints.CENTER, GridBagConstraints.BOTH, inset, 0, 0));
        ajouter.addActionListener(this);
        P1.add(new JLabel("Description :"), new GridBagConstraints(3, 1, 1, 1, 0, 0,
                GridBagConstraints.WEST, GridBagConstraints.NONE, inset, 0, 0));
        P1.add(desc = new JTextField("description " + i), new GridBagConstraints(3, 2, 2, 1, 100, 0,
                GridBagConstraints.CENTER, GridBagConstraints.BOTH, inset, 0, 0));
        valider = new JButton("Valider");
        P1.add(valider,new GridBagConstraints(2, 4, 1, 1, 0, 0,
                GridBagConstraints.CENTER, GridBagConstraints.BOTH, inset, 0, 0));
        P3.add(P1,BorderLayout.CENTER);
        P3.add(P2,BorderLayout.EAST);
        Att.getContentPane().add(P3);  
    }

    public void actionPerformed(ActionEvent arg0) {
        Att = new FenetreSecondaire("Création Attibut");
        FenetreConteneur.getInstance().add(Att);
         
    }
}

Donc voila j'ai besoin d'aide si vous pouvez m'aider je vous en remercie.

14 réponses

Messages postés
90
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
4 février 2009

Salut

Juste par curiosité, il est ou ton constructeur
pour Newproject? parce que le code que tu affiches, il n'y a pas de
constructeur, mais tu l'appelles quand même
via addActionListener (new Newproject()).

public class Newproject implements ActionListener{

// constructeur vide. sert seulement à obtenir

// une reference vers l'objet nouvellement crée

public Newproject(){} // fin Newproject

// sinon, tu peux avoir un truc dans le genre qui
// suit : public getNewproject () {return this} // fin getNewproject

} // fin Newproject


J'espere que ca t'aide a resoudre ton probleme.

chris081
Messages postés
90
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
4 février 2009

Oops
Il y a une erreur, j'ai omis d'include le type de retour pour la fonction getNewproject(). Le corps de celle-ci devrait plutot être comme suit:

public Newproject getNewproject () {return this;} // fin getNewproject
chris081
Messages postés
15
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
8 avril 2011

Salut chris081,
En fait quand je fait MFichier[j].addActionListener(new Newprojet()); le new Newprojet appelle la methode de gestion des évenements (du moins c'est ce que j'ai compris si c'est pas le cas j'ai tout faut alors ..) sinon avant j'avais fait ca :

public class Newprojet implements ActionListener {
    private int i = 0;
    private int x = 0;
    private int y = 0;
    private FenetreSecondaire f;
    private JTextField T1;
    private JButton valider;

    public Newprojet() {
        i++;
        f = new FenetreSecondaire("Nouveau projet " + i);
        f.setLocation(x, y);
        f.setSize(300, 100);
        f.setVisible(true);

        JPanel P1 = new JPanel();
        P1.removeAll();
        JLabel label1 = new JLabel("Entrez le nom du projet :");
        T1 = new JTextField("nouveau_projet" + i);
        valider = new JButton("Valider");
        valider.addActionListener(new CreateAttribut(this));
        P1.add(label1);
        P1.add(T1);
        P1.add(valider);
        P1.revalidate();
        P1.repaint();
        f.getContentPane().add(P1);
    }
    public JTextField getT1() {
        return T1;
    }
    public void actionPerformed(ActionEvent e) {
        FenetreConteneur.getInstance().add(f);
        Object source = e.getSource();
        if (source == valider) {
            FenetreConteneur.getInstance().add(new FenetreSecondaire(this.getT1().getText()));
            new CreateAttribut(this);
        }
    }
}

mais j'ai un probleme de rafraichissement je clique sur nouveau projet ma fentre s'ouvre nickel, je reclique dessus plus rien , je reclique ma fenetre s'ouvre mais l'incrémentation du i ne marche pas et je le meme probleme lorsque je clique sur mon JBouton valider qui appelle la classe "CreateAttribut.java".
Messages postés
90
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
4 février 2009

Oui, il appelle la methode actionPerformed de l'objet Newproject. Cependant, dans le code que tu as donné, il n'y a pas de constructeur ayant le nom Newproject, il y en as un, mais il est implicite. C'est mieux de placer un constructeur, de facon explicite, même si celui-ci ne contient aucun code.

Aussi, pour l'incrémentation de i, celle-ci devrait se faire quand même. Tu l'incrémentes chaque fois ou tu click sur le JMenuItem, via actionPerformed. En tout cas, j'ai modifié quelques endroits de ton code comme suit. Porte une attention particulière aux commentaires. Ils peuvent t'être utiles. Essait et dit-moi si ca fonctionne.


"FenetreConteneur.java"

public class FenetreConteneur extends JDesktopPane {

private FenetreConteneur() {

int i = 0;

this.add(new FenetreSecondaire("Nouveau projet " + i));

this.setVisible(true);

}

public static FenetreConteneur getInstance() {
/*

* ci-dessous, tu as le code d'origine

* if (instance == null) {

* instance = new FenetreConteneur();

* }

* return instance;

*/

return new FenetreConteneur();

}
/*

* Ici, tu declare FenetreConteneur et tu l'initialise avec

* null. Dans la fonction getInstance(), tu effectues une

* condition de selection (if), afin de verifier si instance

* possede la 'valeur' null. Il est evident que oui, car

* cet objet est de type private, donc encapsulé avec l'objet.

* Impossible d'affecter un autre objet a cet objet, sauf

* via une method public/protected. J'ai donc modifie

* ta fonction getInstance

*/

private static FenetreConteneur instance = null;

}


"FenetreSecondaire.java"

public class FenetreSecondaire extends JInternalFrame{

public FenetreSecondaire(String titre) {

this.setTitle(titre);

this.setMaximizable(true);

this.setClosable(true);

this.setSize(300, 100);

this.setResizable(true);
// ici, chaque fois que tu vas créer une nouvelle instance de cet

// objet, il ne sera pas visible par défault.

this.setVisible(false);

}

}
/*ici, tu devrais changer de nom de classe. Il existe deja une

class ayant le nom MenuBar, dans le package java.awt. C'est pas une bonne idée

de nommer ses classes avec des noms de class deja existant. Par exemple, si ton

application utilise une instance de MenuBar du package java.awt, et une instance

de MenuBar, la classe que tu as crée*/

public class MenuBar extends JMenuBar {

JMenuBar menuBar = new JMenuBar();

JMenu[] option = null;

String[] optionName = {"Fichier", "Edition", "Affichage"};

JMenuItem[] MFichier = null;

String[] Fichier = {"Nouveau projet", "Ouvrir", "Enregistrer", "Enregistrer sous", "Exporter", "Importer", "Fermer"};

JMenuItem[] MEdition = null;

String[] Edition = {"Copier", "Couper", "Coller"};

JMenuItem[] MAffichage = null;

String[] Affichage = {"Liste d'attribut", "SAT", "MCD", "MLD"};
/*J'ai ajouté cette method, afin de reduire de beaucoup ton

code plus bas, reduire la 'lenteur' de ton code, et finalemenet, en améliorer

la lisibilite*/

private void buildMenu (String nom, String [] nomsItems, ActionListener al) {

JMenu menu = new JMenu (nom);


for (int i = 0; i < nomsItems.length; i++){

// creer un nouvel item

JMenuItem item = new JMenuItem (nomsItems[i]);

// inscrire un interface de gestion d'evenement aupres de l'item

item.addActionListener (al);


// ajouter l'item au menu

menu.add (new JMenuItem (nomsItems[i]));

} // fin if


// ajouter le menu nouvellement crée à la barre de menus (this!)

add (menu);

} // fin buildMenu (String, String[], ActionListener)


public MenuBar() {
// bon, ici, nous avons optionName, qui contient les 3 noms de JMenu.

// nous avons aussi les 3 arrays, Fichier, Edition et Affichage, qui

// contiennent les noms pour les JMenuItem de chacun des JMenu.

// Assossions ces JMenuItem au bon JMenu!. Il ne te reste plus qu'a

// créer un objet de type ActionListener pour chacun des JMenuItem

// que tu as, et ajouter la reference a cet ActionListener comme

// dernier argument aux appels de méthodes suivants:

this.buildMenu (optionName[0], Fichier, );

this.buildMenu (optionName [1], Edition, );

this.buildMenu (optionName[2], Affichage, );


/* J'ai tout mis en commentaire, si jamais tu veux le conserver pour t'y referer a un autre

moment...

option = new JMenu[optionName.length];
MFichier = new JMenuItem[Fichier.length];
MEdition = new JMenuItem[Edition.length];
MAffichage = new JMenuItem[Affichage.length];

for (int i = 0; i < optionName.length; i++) {
menuBar.add(option[i] = new JMenu(optionName[i]));
if (option[i].getText().equals("Fichier")) {
for (int j = 0; j < Fichier.length; j++) {
if (Fichier[j].equals("Fermer")) {
MFichier[j] = new JMenuItem(Fichier[j]);
//ici, new Fermer(), ca crée quel objet?
MFichier[j].addActionListener(new Fermer());
} else if (Fichier[j].equals("Nouveau projet")) {
MFichier[j] = new JMenuItem(Fichier[j]);
MFichier[j].addActionListener(new Newprojet());
} else {
MFichier[j] = new JMenuItem(Fichier[j]);
}
option[i].add(MFichier[j]);
}
}
if (option[i].getText().equals("Edition")) {
for (int j = 0; j < Edition.length; j++) {
MEdition[j] = new JMenuItem(Edition[j]);
option[i].add(MEdition[j]);
}
}
if (option[i].getText().equals("Affichage")) {
for (int j = 0; j < Affichage.length; j++) {
if (Affichage[j].equals("Fermer")) {
MAffichage[j] = new JMenuItem(Affichage[j]);
//ici, new ListeAttribut(), ca crée quel objet?
//MAffichage[j].addActionListener(new ListeAttribut());
}
MAffichage[j] = new JMenuItem(Affichage[j]);
option[i].add(MAffichage[j]);
}
}
}
*/




this.add(menuBar);

this.setVisible(true);

}

}


"Newprojet.java"

public class Newprojet implements ActionListener {

private int i 0, x 0, y = 0;

private FenetreSecondaire f;

private JTextField T1;

private JButton valider;


public void InitNewprojet() {

f.setLocation(x, y);

f.setSize(300, 100);

f.setVisible(true);


JPanel P1 = new JPanel();
/*ici, ca sert a quoi l'instruction suivante?

autrement dit, tu retires tout (removeAll) les components du panel

que tu viens tout juste de créer, auquel tu n'a ajouté aucun

component */

//P1.removeAll();

JLabel label1 = new JLabel("Entrez le nom du projet :");

T1 = new JTextField("nouveau_projet" + i);

valider = new JButton("Valider");

valider.addActionListener(new Attribut());

P1.add(label1);

P1.add(T1);

P1.add(valider);

P1.revalidate();

P1.repaint();

f.getContentPane().add(P1);

}


public JTextField getT1() {return T1;}


public void actionPerformed(ActionEvent e) {

i++;

f = new FenetreSecondaire("Nouveau projet " + i);

this.InitNewprojet();

FenetreConteneur.getInstance().add(f);

Object source = e.getSource();

if (source == valider) {

FenetreConteneur.getInstance().add(new FenetreSecondaire(this.getT1().getText()));

new CreateAttribut(this);

}

}

}
Messages postés
90
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
4 février 2009

Oops Il y a une erreur dans la fonction buildMenu du code ci-haut


private void buildMenu (String nom, String [] nomsItems, ActionListener [] al) {

JMenu menu = new JMenu (nom);


for (int i = 0; i < nomsItems.length; i++){

// creer un nouvel item

JMenuItem item = new JMenuItem (nomsItems[i]);

// inscrire un interface de gestion d'evenement aupres de l'item

item.addActionListener (al[i]);


// ajouter l'item au menu

menu.add (new JMenuItem (nomsItems[i]));

} // fin if


// ajouter le menu nouvellement crée à la barre de menus (this!)

add (menu);

} // fin buildMenu (String, String[], ActionListener)
Messages postés
15
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
8 avril 2011

Merci de ta rapidité et de tes code
Alors pour ta question : //ici, new Fermer(), ca crée quel objet? MFichier[j].addActionListener(new Fermer()); ca appelle une classe "Fermer.java" implementer par actionListener qui dis juste de fermer le programme quand on clique sur fermer dans le menu Fichier :
public class Fermer implements ActionListener{
    public void actionPerformed(ActionEvent e) {
        System.exit(0);
    }
}
Sinon j'ai pas bien compris au niveau de l'appelle de la fonction buildMenu dans le fichier "MenuBar.java" que j'ai renommé en "MonMenuBar.java" comme tu me l'avais di .
Je dois créer un objet de type ActionListener pour chaque JMenuItem c'est la que je vois pas trop ce qu'il faut faire.
J'ai pas pu tester les fichier a cause de ca désolé.
Messages postés
90
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
4 février 2009

Salut

Une barre de menu (JMenuBar) contient des menus (JMenu). Un menu (JMenu) contient des items (JMenuItem). Un item (JMenuItem) a des interfaces d'attachées (dans notre cas, ActionListener). La fonction buildMenu prends comme argument un tableau de type ActionListener. Il te faut donc créer un objet (class) de type ActionListener pour chacun des JMenuItem que tu as. Cependant, tu dois voir le code comme étant un digramme de Venn. Pour chaque appel à la fonction buildMenu, on lui transmet : un nom, un tableau d'items et un tableau d'ActionListener que la fonction enregistre auprès de l'item correspondant. Exemple
this.buildMenu (optionName[1], Edition, alEdition); créera un JMenu ayant pour nom la valeur contenue à l'index 1 du tableau optionName. Ce JMenu aura le meme nombre de JMenuItem que le nombre d'objets du tableau Edition. Cette fonction affectera à chacun des JMenuItem l'interface associée du tableau alEdition. Textuellement, nous aurions comme suit:
optionName[1] : Edition[0] -> alEdition[0]
optionName[1] : Edition[1] -> alEdition[1]
optionName[1] : Edition[x] -> alEdition [x]...


Donc, ce qu'il te reste a faire, c'est :
1- créer un objet de type ActionListener pour chacun des JMenuItem du JMenu ("Edition").

2- conserver (dans l'ordre!) chacun des ActionListener dans un tableau d'ActionListener

3- transferer ce tableau d'ActionListener a la methode buildMenu.

4- recommencer pour les JMenu restants (soit Fichier, et Affichage).
(en tout, tu devrais avoir un alFichier, contenant 7 objets de type ActionListener, un alEdition contenant 3 objets de type ActionListener et un alAffichage contenant 4 objets de type ActionListener.


Si tu as encore besoin d'aide, n'hésite pas a demander.


<hr width="100%" />

Est-ce que les femmes pètent autant que les hommes ?
Oui. Cependant, les hommes semblent en tirer plus de gloire que les femmes.

Retrouvez l'intégrale ici
Messages postés
15
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
8 avril 2011

Salut
ok j'ai compris merci pour ces explications très précise.
Je fais ça et je tiens au courant.
Messages postés
15
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
8 avril 2011

Bonjour,

Arf le code marche pas au niveau de "MonMenuBar.java"
il prend pas en compte les ActionListener que je lui rentre.
J'ai créer mes 3 tableaux :
ActionListener alFichier = {new Newprojet(), new Fermer()};
(j'en ai mis que 2 pour tester j'ai pas encore fait les autres actions.
Et quand je lance ma Fenetre a partir de "Fenetre.java" et que je clique sur Nouveau projet ou fermer. rien ne se passe.
Messages postés
15
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
8 avril 2011

non c'est bon il y avait juste une petite erreur dans le fichier "MonMenuBar.java" dans la fonction buildMenu
 private void buildMenu(String nom, String[] nomsItems, ActionListener[] al) {
        JMenu menu = new JMenu(nom);
        for (int i = 0; i < nomsItems.length; i++) {
// creer un nouvel item
            JMenuItem item = new JMenuItem(nomsItems[i]);
// inscrire un interface de gestion d'evenement aupres de l'item
            item.addActionListener(al[i]);
// ajouter l'item au menu
            //menu.add (new JMenuItem (nomsItems[i]));
             // ma correction :
            menu.add(item);
        }
// ajouter le menu nouvellement crée à la barre de menus (this!)
        add(menu);
    }
Messages postés
15
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
8 avril 2011

je te remercie de ton aide. je laisse la question ouverte si jamais j'ai encore besoin d'aide (ce qui est probable) .
Ben tiens comment je pourrais faire pour associer un scroll vertical (JScrollBar je suppose) sur une fenetre secondaire (JInternationalFrame)?
Messages postés
90
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
4 février 2009

Salut

Pour les JScrollBar, j'ai deja demande une information a ce sujet.
Tu peux consulter le code
ici.
Cependant, ce code utilise un JScrollPane, au lieu de JScrollBar.
Un JScrollPane est beaucoup plus simple à utiliser.
Tout ce dont tu as besoin, concernant le code à l'adresse ci-dessus, c'est:

- l'instruction qui crée le JTextArea

(JTextArea texte = new JTextArea(););
- les instructions concernant l'objet JScrollPane:
  JScrollPane scrollbars = new JScrollPane (JTextArea);

scrollbars.setVerticalScrollBarPolicy (javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

scrollbars.setHorizontalScrollBarPolicy (javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

scrollbars.add (texte);



Ce code t'ajoute un objet JTextArea
(c'est en principe le même objet qu'un JTextField, cependant le JTextArea est multiligne).
Ensuite, tu ajoute ton JScrollPane soit directement sur le JInternalFrame,
soit sur un JPanel que tu ajoutes ensuite sur le JInternalFrame.
Pas besoin de t'inquiéter concernant le JTextArea; celui-ci est maintenant ajouté au JScrollPane.


Voici les définitions de constantes possibles pour les ScrollBarPolicy de l'objet JScrollPane

- *_SCROLLBAR_ALWAYS : affichera toujours des JScrollBar 'autour' du JTextArea;
- *_SCROLLBAR_AS_NEEDED : affichera seulement la JScrollBar correspondant au besoin

(par exemple si ta zone de texte contient plus de lignes que la zone ne peut en afficher,
alors il y aura une JScrollBar verticale accessible).
- *_SCROLLBAR_NEVER : n'affichera jamais de scrollbar.

L'astérisque peut être remplacé par VERTICAL ou HORIZONTAL

J'espère que ca t'aide un
petit peu plus a continuer. Si tu as encore des questions, n'hésite pas !

chris081

<hr width="75%" align="center" />

Est-ce que les femmes pètent autant que les hommes ?
Oui. Cependant, les hommes semblent en tirer plus de gloire que les femmes.

Retrouvez l'intégrale ici
Messages postés
15
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
8 avril 2011

Salut,

Merci pour les explications j'ai fait avec un JScrollPane que j'ai ajouté dans ma JInternalFrame et sa marche nickel.
Merci pour l'aide que tu m'as apporté depuis le début.
C'était pour un projet et je dois le rendre Lundi et grace à toi j'ai très bien avancé je pourrais le rendre dans les temps :D
A la prochaine
Messages postés
90
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
4 février 2009

Salut
Si tu utilises ce code, tel quel, c'est normal:


C'est que nous avons crée deux fois le même JMenuItem:

// creer un nouvel item

JMenuItem item = new JMenuItem (nomsItems[i]);

// inscrire un interface de gestion d'evenement aupres de l'item

item.addActionListener (al[i]);

// ajouter l'item au menu

menu.add (new JMenuItem (nomsItems[i]));

Il te faut remplacer ce qui est en rouge par :

menu.add (item);

Ce qui se produit, c'est que tu ajoutes a ton menu, un item qui n'a pas d'écouteur d'enregistré. Avec la correction apportée ci-haut, ca devrait fonctionner. Désolé, je ne suis pas parfait, en conséquence, mon code ne l'est pas non plus!

chris081



<hr align="center" width="50%" />

Est-ce que les femmes pètent autant que les hommes ?
Oui. Cependant, les hommes semblent en tirer plus de gloire que les femmes.

Retrouvez l'intégrale ici