IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Tableau de boutons


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut Tableau de boutons
    Bonjour tt monde,

    Mon probleme consiste a afficher des element d'une liste sur plusieurs bouton.
    J'ai essayer un tableau de bouton mais ça ne donn rein pr le moment voila mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
       NodeList nl = racine.getElementsByTagName("moteur");
     
        JButton[nl.getLength()] jbutton = new JButton();
     
        for (int i = 1; i < nl.getLength(); ++i) {
           Element lilo = (Element) nl.item(i);
     
           jbutton[i].setText(lilo.getAttribute("name");
    }
    merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    il y a un problème avec l'instanciation des JButton.
    tu peux faire comme ça sinon c'est plus simple et dynamique.
    après tu peux varier l'ArrayList par ce que tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NodeList nl = racine.getElementsByTagName("moteur");
    ArrayList<JButton> liste = new ArrayList<JButton>();
     
    for (int i = 0; i < nl.getLength(); i++) {
           Element lilo = (Element) nl.item(i);
           liste.add(new JButton(lilo.getAttribute("name"));
    }
    si tu as besoin d'un tableau tu peux faire comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NodeList nl = racine.getElementsByTagName("moteur");
    JButton[] jbutton = new JButton[nl.getLength()];
     
    for (int i = 0; i < nl.getLength(); i++) {
           Element lilo = (Element) nl.item(i);
           jbutton[i] = new JButton(lilo.getAttribute("name"));
    }

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Je croit que t'a raison ,mais par contre concernant la liste j'ai un probleme :

    (symbol Arrayliste non reconue) il ne reconnait pas le terme Arrayliste<> , qu'est ce que tu en pense ?

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    Le <JButton> défini que tu dois avoir obligatoirement des JButton dans ton tableau.
    Je ne sais pas si tu utilise un IDE comme eclipse ou autre mais il faut importer l'ArrayList sinon ça ne marchera pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import java.util.ArrayList;
    Sinon tout dépend de la version que tu utilise sur les anciennes versions de java met simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList liste = new ArrayList();
    Mais si tu peux le mettre n'hésite pas c'est une sécurité de plus.

    EDIT :
    ArrayList sans le e à la fin au cas ou c'est peut être ça l'erreur.

    EDIT 2 :
    pour utiliser après l'array tu peux faire par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (JButton b : liste) {
        monPanel.add(b);
    }

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    J'ai refait le code a la lettre j'ai plus de prob d'inconue .mais dans l'execution les buttons ne sont pas affichées on voit just le panel vide sans aucun boutons voila le code apres correction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
     NodeList nl = racine.getElementsByTagName("moteur");
     
     
     ArrayList<JButton> liste = new ArrayList<JButton>();
     
    for (int i = 0; i < nl.getLength(); i++) {
           Element lilo = (Element) nl.item(i);
           liste.add(new JButton(lilo.getAttribute("name")));
     
          // System.out.println(lilo.getAttribute("name"));
     
           for (JButton b : liste) {
        jPanel1.add(b);
    }
     
    }

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    est-ce que tu as mis un layout sur ton panel?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    NodeList nl = racine.getElementsByTagName("moteur");
     
     
    ArrayList<JButton> liste = new ArrayList<JButton>();
     
    for (int i = 0; i < nl.getLength(); i++) {
           Element lilo = (Element) nl.item(i);
           liste.add(new JButton(lilo.getAttribute("name")));
     
          // System.out.println(lilo.getAttribute("name"));
    }
    jPanel1.setLayout(new GridLayout(nl.getLength()));
    // c'est ici qu'il faut mettre les boutons dans le panel.
    for (JButton b : liste) {
        jPanel1.add(b);
    }
    //ne pas oublier d'ajouter le panel dans la frame ou je ne sais pas ce que tu tuilise
    contentPane.add(jPanel1);

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    En fait j'utilise l'editeur graphique de netBeans RC 6.1 donc je dessine un panel tt simplment et je prende son nom dans ce cas son nom c jpanel1.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    ok alors test déjà ca sans le contentPane.add()...
    y a 2-3 modifications par exemple l'emplacement de la boucle ou tu ajoute les composants.

    si ca ne marche pas envoie un bout de code un peu plus complet et je regarderai si tu veux.

  9. #9
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    C ok .ça marche les boutton se sont affichés ,just un detail consernant le GridLayout qui prend en faite 2 parametres ça a planté au debut vu k'il avait un seul paramtre ,mais apres coorection tt marche comme sur des roulette.Je te remerci pr ton aide mon ami.

    En fait le but c'etait pas de metre le contenue (lilo.getAttribute("name")) sur des boutons mais je doit en faire un menu deroulant ,les boutton c'etait just pour essayer mais je pense que c'est le meme principe hein.
    Qu' en pense tu ?

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    oui même principe c'est juste jmenu.addItems(Objet);

    donc jmenu.addItem("text");

    si t'as encore besoin d'aide hésite pas :p

  11. #11
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    We c marche aussi bien pr les boutton que les jMenuItem, mais just une question vue que j'utilise l'editeur graphique (de NetBeans 6.1 RC) avec le quel je place mon menu bar et tt les autres items par defaut.est ce que par hazard des focntion comme lepar exemple GridLayout(nl.getLength(),100) ne risque pas de deformer l'interface graphike .

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    alors pour faire simple tu n'aura plu besoin de gridlayout si tu utilise un JComboBox.
    le layout te permet de modeler ton affichage et de placer tes composants comme tu le veux.
    tu peux les mettre directement avec netbeans aussi d'ailleurs.

    en fait dans ton cas le layout servait à définir qu'il y avait un tableau de x par y composants.
    par exemple si tu met 3 composants en horizontal et 4 en vertical (d'ou les 2 valeurs) tu aura une grille dans laquelle se mettront automatiquement les composants que tu ajoutera.

    après tu n'es pas obligé d'en utiliser mais si ton panel est en BorderLayout de base si tu rajoute plusieurs composants, ils ne s'afficheront pas car on ne peut mettre qu'un composant par emplacement et les emplacements sont haut (north), bas (south), gauche (west), droite (east) et centre (center).

    tu peux aller voir ici les différents layouts avec les explications :
    http://www.developpez.net/forums/sho...d.php?t=528316

  13. #13
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Un autres souci qui se prsente c'est l'association d'evenement a ces JMenuItems par exemple d'habitude j'arrive a gerer ces evnement a travres mon editeur de nebeans vue qui sont figé et non dynamique ,par contre dans ce cas les JMenuItems sont dynamique et je doit associer a chacun d'eux un evenment de sort (MousePressed ==> jTexfeld.setVisible(true)).

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    non tu peux appliquer un autre type de listener dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    jComboBox.addItemListener(new ItemListener() {
    	public void itemStateChanged(ItemEvent evt) {
    		//ton code....
    	}
    });
    après tu peux toujours récupérer l'item qui a été sélectionné en mettant la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jComboBox.getSelectedItem();
    attention ça te renvoie un objet de type Object tu dois le transtyper avant de l'utiliser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String s = (String)jComboBox.getSelectedItem();
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private void initialiseComponent() {
    	//......
    	jComboBox.addItemListener(new ItemListener() {
    		public void itemStateChanged(ItemEvent evt) {
    			maMethode();
    		}
    	});
    }
    private void maMethode() {
    	String s = (String)jComboBox.getSelectedItem();
    	System.out.println(s);
    }
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    jComboBox.addItemListener(new ItemListener() {
    	public void itemStateChanged(ItemEvent evt) {
    		String s = (String)evt.getItem();
    		System.out.println(s);
    	}
    });

  15. #15
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    En fait j'ai opter pur le dernier code exemple que tu m'a poster et donc en remplaçant les jComboBox Avec les elemnt de mon Arraylist qui sont sont des JmenuItem càd les "b" j'aboutit au code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    jMenu3.setLayout(new GridLayout(nl.getLength(),100));
    // c'est ici qu'il faut mettre les boutons dans le panel.
    for (JMenuItem b : liste) {
     
        jMenu3.add(b);
    b.addItemListener(new ItemListener() {
    	public void itemStateChanged(ItemEvent evt) {
    		String s = (String)evt.getItem();
    		System.out.println(s);
    	}
    });
    // 
    }
    le probe c'est qu'il ne roconait pas le "ItemListener() " sachant que j'ai introduit le awt.Event.

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    c'est normal ce n'est pas sur le JMenuItem qu'il faut mettre le listener mais sur le JMenu.
    Il lèvera un event quand la selection change.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // c'est ici qu'il faut mettre les boutons dans le panel.
    for (JMenuItem b : liste) {
        	jMenu3.add(b);
    }
    jMenu3.addItemListener(new ItemListener() {
    	public void itemStateChanged(ItemEvent evt) {
    		String s = (String)evt.getItem();
    		System.out.println(s);
    	}
    });
    et tu n'as pas besoin de mettre de layout sur un JMenu qui est lui de tout façon déjà formaté d'une certaine manière pour l'affichage.

  17. #17
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Excuse moi mais je ne vous suit pas c les b qui representent les elemnt de la liste et le Jitemmenu car en clicant sur les jITemMenu j'marais faire appraitre un JTxtFeld.

    En outre meme en remplçant le b par jMenu3 comme tu me la conseillé il ne le reconnait tjs pas
    Deuxiement prk le bout de code ci dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    {
    String s = (String)evt.getItem();
    		System.out.println(s);
    }
    Ne puis je pas le remplacer tt simplement par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    jTextFeld.setVisible(true);

  18. #18
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    oui les b sont les items et donc pour savoir quand la selection a changée on met un listener sur le jMenu qui contient tous les items.
    ce qui aura pour effet de nous signaler quand la selection change et de nous dire quel item à été selectionné dans la liste.

    tu peux directement remplacer par ton code pour afficher le TextFiled par exemple comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
    	String s = (String)evt.getItem();
    	jTextField.setText(s);
    	jTextField.setVisible(true);
    }
    ce qui aura pour effet de t'afficher le textField avec comme texte à l'interieur, le text qui se trouvait dans le JMenuItem selectionné.
    si tu ne veux qu'afficher le jTextField il te suffit de mettre la dernière ligne.

    par contre attention à une chose, en java il faut faire attention à bien écrire les choses sans fautes de majuscules ou autre.

    par exemple je ne sais pas si tu as copié collé mais dans awt.Event le "e" est en minuscule car c'est un nom de package et non pas un nom de classe.
    tu devrais donc faire soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Importe toutes les classes de awt.event
    import java.awt.event.*;
    soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // N'importe que les 2 classes désirées.
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    Sinon tu peux ajouter sur tes b qui représentent des JMenuItem un ActionListener pour écouter l'action (c.à.d le clic) sur cet item comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // c'est ici qu'il faut mettre les boutons dans le panel.
    for (JMenuItem b : liste) {
    	jMenu3.add(b);
    	b.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent arg0) {
    			jTextField.setVisible(true);
    		}
    	});
    	// ...
    }
    attention à ce code parce qu'il ne fera que t'afficher le jTextField quel que soit le menuItem sur lequel tu appuie.

    dans ce cas tu devra rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

  19. #19
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Est ce que tu aurait une idée pour gerer un boutton parcourir parcque l'evenment que je veut acossier a ces "b" c'est qu'en cliquant deçu elles m'affichent une fentre a travers la quelle je peut slectionner un fichier de n'importe quel endroit via un bouton parcourir ,J'ai utiliser le jFileCooser mais ça ne donne rien pr le moment .

  20. #20
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    pour rajouter une filechooser tu peux faire comme ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public void initComponent() {
    	//...........
    	for (JMenuItem b : liste) {
    		jMenu3.add(b);
    		b.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent arg0) {
    				open();
    			}
    		});
    		// ...
    	}
    	//..........
    }
     
    private void open() {
    	JFileChooser chooser = new JFileChooser("./");
    	int returnVal = chooser.showOpenDialog(this);
    	if (returnVal == JFileChooser.APPROVE_OPTION) {
    		String nomFichier = chooser.getSelectedFile().getPath();
    		//... ton code
    	}
    }
     
     
    // si tu veux rajouter un filtre tu peux rajouter ça après JFileChooser chooser = new JFileChooser();
    // Il faudra définir quel type de fichier tu voudra (dans cette exemple c'est fichiers .txt uniquement)
    chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
    	public boolean accept(File f) {
    		return f.getName().toLowerCase().endsWith(".txt") || f.isDirectory();
    	}
    	public String getDescription() {
    		return "Fichier du calculateur (.txt)";
    	}
    });

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [ActionListener] Evénement sur tableau de boutons
    Par frouge dans le forum Composants
    Réponses: 5
    Dernier message: 08/10/2011, 03h44
  2. Tableau de boutons
    Par hbzied dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 26/04/2006, 15h14
  3. Disposition d'un tableau de boutons dans un JPanel
    Par Arnaud F. dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 23/04/2006, 19h09
  4. [AWT]tableau de boutons
    Par pierrot106 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 06/12/2004, 18h59
  5. Gérer les events d'un tableau de boutons
    Par lord_kalipsy dans le forum wxWidgets
    Réponses: 7
    Dernier message: 20/10/2004, 11h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo