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

 Java Discussion :

Un bouton JFrame qui contrôle un JPanel


Sujet :

Java

  1. #1
    Membre très actif
    Profil pro
    Doctorant
    Inscrit en
    Février 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 258
    Par défaut Un bouton JFrame qui contrôle un JPanel
    Bonjour,

    J'ai un JPanel dans un JFrame et quelques contrôleurs visuels sur mon JFrame "Checkbox et bouton".

    J'ai pu générer l'interaction entre les Checkbox et le JPanel mais je n'ai pas pu relier les boutons avec le JPanel. Par exemple un JButton qui vide le panel et le redessine.

    tous les if .selected fonctionnent bien mais public void actionMouseClicked(java.awt.event.MouseEvent evt) des boutons ne fonctionne pas.

    Quelqu'un saurait-il m'indiquer comment résoudre ce problème ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    dans un MouseAdapter, la méthode qui réagit à un clic, c'est mouseClicked(MouseEvent event), pas actionMouseClicked(MouseEvent event).

    D'autre part, pour écouter les actions sur un JButton, on utilises un actionListener :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    jbutton.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent event) {
          ...
       }
    });
    C'est d'ailleurs également le cas pour un JCheckBox.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre très actif
    Profil pro
    Doctorant
    Inscrit en
    Février 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 258
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    dans un MouseAdapter, la méthode qui réagit à un clic, c'est mouseClicked(MouseEvent event), pas actionMouseClicked(MouseEvent event).

    D'autre part, pour écouter les actions sur un JButton, on utilises un actionListener :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    jbutton.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent event) {
          ...
       }
    });
    C'est d'ailleurs également le cas pour un JCheckBox.
    jbutton.addActionListener je peux pas faire ça je veux rajouter ça au panel et non pas au bouton

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Tu as bien dit que tu voulais avoir un bouton qui vide le panel ? Donc c'est bien le bouton qui fait l'action (qui s'applique au panel).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre très actif
    Profil pro
    Doctorant
    Inscrit en
    Février 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 258
    Par défaut
    je me suis mal expliqué désolé j'ai ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    pan.addMouseListener(new MouseAdapter() {
       private JButton commande;
     
       public void mousePressed(MouseEvent ev) {

    et ça fonction très bien avec le checkbox , mais j'ai un bouton sur ma jframe j'arrive pas a le relier avec le jpanel pour le vider je suis sur netbeans

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    J'ai bien compris que tu avais mis un MouseAdapter sur un JPanel.
    Mais je ne comprends ce que tu veux dire par relier un bouton avec un panel.

    Un JPanel c'est un conteneur de composants, qui peut contenir, entre autres, un bouton. Un bouton (JButton par exemple), c'est un composant qui fait des actions, auxquelles on réagit par un ActionListener (ou on met un Action dans le bouton).

    Si tu parles de mettre un JButton dans un JPanel : ça se fait par la méthode JPanel.add(), en ayant pris soin de mettre un LayoutManager dans le JPanel.

    Si le but, c'est que quand on clique sur le bouton, on fait quelque chose (comme "vider" un panel), c'est le bouton qu'on écoute pas le panel. Et ça se fait par un ActionListener.

    Le fait que tu sois sous netbeans ne change rien à l'affaire.

    J'ai pas capté ce que tu as fait au juste avec le JCheckBox. Et à quoi sert le MouseAdapter par rapport ce checkbox.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre très actif
    Profil pro
    Doctorant
    Inscrit en
    Février 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 258
    Par défaut
    j'ai ce bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      private void actionActionPerformed(java.awt.event.ActionEvent evt) {                                       
                    // TODO add your handling code here
            //  pan.declencheur.start();
            pan.removeAll();
     
        }
    mais quand je clique dessus y'a rien sachant que le bouton est dans un jfram

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Ce que tu montres c'est pas un bouton, c'est une méthode : elle est appelée par quoi cette méthode ? Il suffit pas de créer une méthode pour qu'elle soit appelée !

    Lorsqu'on a un bouton, sous entendu un JButton, et qu'on veu réagir aux "clics" sur ce bouton (quand on appuie sur le bouton), on enregistre un ActionListener dessus, comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    jbutton.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent event) {
          ... et ici on met le code qu'on veut faire 
       }
    });
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre très actif
    Profil pro
    Doctorant
    Inscrit en
    Février 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 258
    Par défaut
    Merci mais y'a pas d'erreur mais ça ne donne aucune influence sur mon panel

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Ce n'est pas parce qu'il y a pas d'erreurs que ça va faire ce que tu attendes que ça fasse : si tu fais une méthode qui n'est jamais appelée, ce que tu attends qu'elle fasse ne se fera jamais.

    Volià un exemple d'une JFrame avec un JPanel et un JButton : le JPanel a 10 textes dedans au début, et quand tu cliques sur le bouton, les 10 textes sont supprimés du 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
     
    public class ExempleJFrameAvecBouton {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
                    // on mets le composant créé par createFrameContent() dans la frame
    		frame.getContentPane().add(createFrameContent());
     
    		frame.setSize(400, 400);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static Component createFrameContent() {
                    // on créé un panel principal, avec un borderlayout
    		JPanel mainpanel = new JPanel();
    		mainpanel.setLayout(new BorderLayout());
     
                    // on créé un panel avec 10 textes dedans
    		final JPanel panel = createPanel();
     
                    // on créé un bouton
    		JButton button = new JButton("Bouton");
                    // on ajoute l'actionListener qui réagira au clic sur le bouton
    		button.addActionListener(new ActionListener() {
     
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				panel.removeAll(); // on supprime tous les composants contenus 
    				panel.revalidate(); // on indique que les composants on changé dans le panel et qu'il va falloir relayouter
    				panel.repaint(); // on redessine le panel
    			}
     
    		});
                    // on met le panel avec les textes au centre du panel principal
    		mainpanel.add(panel, BorderLayout.CENTER);
                    // on met le bouton au sud du panel principal
    		mainpanel.add(button, BorderLayout.SOUTH);
    		return mainpanel;
    	}
     
    	private static JPanel createPanel() {
                    // on créé un panel avec un layout de une colonne de 10 lignes
    		JPanel panel=new JPanel();
    		panel.setLayout(new GridLayout(10, 1));
                    // on créé 10 textes, alignés au centre
    		for(int i=1; i<=10; i++) {
    			panel.add(new JLabel("text "+i,JLabel.CENTER));
    		}
    		return panel;
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Ca y est, je crois que j'ai compris ce que tu voudrais faire

    Tu voudrais qu'en cliquant sur un bouton, ce qui est dessiné dans ton Panneau ne le soit plus : qu'il soit en quelque sorte effacé.

    Un composant swing n'est pas comme un tableau noir ou une ardoise magique, où tu dessines des trucs, et tu les effaces quand tu veux.

    La méthode paint() est appelée chaque fois que nécessaire (en gros, quand on lui demande ou quand Swing dit qu'elle doit l'être) : le code qui est mis dans cette méthode, s'éxécute à chaque fois qu'elle est appelée. On efface donc pas quelque chose qui y est dessiné, on ne le dessine pas.

    Voici un exemple succinct de canvas qui dessine des rectangles.

    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
    35
    36
    import java.awt.Rectangle;
    import java.awt.Graphics;
    import java.awt.Canvas;
    import java.util.List;
    import java.util.ArrayList;
     
    public class DessinRectangle extends Canvas {
        private List<Rectangle> rectangles;
     
        public DessinRectangle() {
           rectangles=new ArrayList<>();
        }
     
        /**
          * On ajoute un rectangle à dessiner
          */
        public void ajouteRectangle(Rectangle rectangle) {
           rectangles.add(rectangle);
           repaint();
        }  
     
        /**
          * On efface tous les rectangles
          */
        public void efface() {
           rectangles.clear();
           repaint();
        }
     
        public void paint(Graphics g) {
           super.paint(g);
           for(Rectangle rectangle : rectangles) {
              g.fillRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
           }
        }
    }
    Si tu veux un panel qui dessines des trucs et que tu veux que ça dessine autre chose (effacer, c'est aussi "dessiner autre chose" : c'est, en fait, dessiner rien):
    • soit tu prévois un système qui permette de choisir ce qu'on veut dessiner, par exemple avec un boolean :


      public void paint(Graphics g) {
      super.paint(g);
      if ( dessiner ) {
      // je dessine ici : donc si dessiner == false, ça dessiner rien = c'est effacé
      }
      }
    • soit tu fait comme dans mon exemple : tu fais une liste de trucs à dessiner, et pour effacer, tu vides cette liste
    • soit tu fais plusieurs classes de panel/canvas et tu changes le composant dans la frame (c'est à dire que tu enlèves un panel et tu en met un autre à la place), ou tu utilises un CardLayout pour empiler les différentes versions de panels, et n'afficher que l'un d'entre eux à la fois
    • soit tu fais une classe qui délègue le dessin, un AbstractDrawer,comme dans cet exemple, et tu le changes pour dessiner autre chose :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      public abstract class AbstractDrawer {
           public abstract void draw(Graphics g);
      }
      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
      public class Dessin extends JPanel {
          private AbstractDrawer drawer;
       
          public Dessin() {
          }
       
          /**
            * indique quel dessin on veut dessiner
            */
          public void setDrawer(AbstractDrawer drawer) {
             this.drawer=drawer;
             repaint();
          }  
       
          /**
            * indique qu'on ne veut plus rien dessiner
            */
          public void efface() {
             this.drawer=null;
             repaint();
          }
       
          public void paint(Graphics g) {
             super.paint(g);
             if ( drawer!=null ) drawer.draw(g);
          }
      }
    • soit tu fais ton dessin dans une image, qui elle est effaçable, et dans le panneau tu dessines cette image...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. JFrame qui ne s'affiche pas après la sélection d'un bouton
    Par LaseLiep dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 08/10/2007, 19h28
  2. Liste déroulante qui contrôle un sous-formulaire
    Par Krowser dans le forum Access
    Réponses: 1
    Dernier message: 02/06/2006, 10h56
  3. Un bouton supprimer qui ne supprime pas... help!
    Par SpyesX dans le forum Access
    Réponses: 16
    Dernier message: 20/10/2005, 01h42
  4. [JFrame] ajout de plusieurs JPanel
    Par illegalsene dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 06/04/2005, 00h11
  5. Boutons Radios qui charge une page php différente
    Par nebule dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/11/2004, 15h25

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