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

EDT/SwingWorker Java Discussion :

Interagir avec des boutons


Sujet :

EDT/SwingWorker Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut Interagir avec des boutons
    Bonjour,
    J’ai créé un programme qui contient une zone de texte et 4 boutons:
    Après quelques recherches je trouve que l'interaction avec les boutons est assurée par plusieurs méthodes prédéfinies qui sont:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void mouseClicked(MouseEvent event) {
    }
    public void mouseEntered(MouseEvent event) {
    }
     
    public void mousePressed(MouseEvent event) {
     
    	}
    public void mouseExited(MouseEvent arg0) {
     
    }
    public void mouseReleased(MouseEvent arg0) {
    J’ai créé un autre programme qui contient deux méthodes une qui permet de remplir deux ArrayList et l'autre pour afficher ces listes dans une interface. la classe contient les deux méthodes qui est appelée Affichage(). Pour le bouton j'ai créé une classe bouton pour définir les méthodes d'interaction avec les boutons. donc pour appeler la classe affichage() voici le code que je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void mousePressed(MouseEvent event) {
    new Affichage();
    	}
    mais malheureusement ça marche pas. selon vous est ce que je dois mettre l'interface graphique dans une classe appart pour assurer ça? si non alors S'il vous plait comment corrigé ça?
    Merci Bien

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    L'interaction avec des javax.swing.JButton (je suppose qu'il s'agit de JButton SWING, parce que des boutons en Java, ça veut rien dire) se fait avec un ActionListener qu'on enregistre sur le bouton via la méthode addActionListener().

    Par exemple :

    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
    public class ExempleJButton {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Exemple");
     
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
     
    		frame.getContentPane().add( createButton() );
     
    		frame.setSize(300, 100);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static Component createButton() {
     
    		JButton button = new JButton("Mon bouton");
    		button.addActionListener(new ActionListener() {
     
    			@Override
    			public void actionPerformed(ActionEvent event) {
    				System.out.println("Mon bouton a été appuyé");
    			}
    		});
     
    		// Notes qu'en Java8 on peut écrire aussi (lamba-expression) à la place de la ligne précédente
    		//button.addActionListener((event) -> System.out.println("Mon bouton a été appuyé"));
     
    		return button;
     
    	}
    }
    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 du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Bonjour,
    J’ai déjà créé une classe Bouton. voici le code:
    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
    import java.awt.ActiveEvent;
    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.JButton;
    public class Bouton extends JButton implements MouseListener{
    /**
             * 
             */
    	private static final long serialVersionUID = 1L;
    private String name;
    private Image img;
    public Bouton(String str){
    super(str);
    this.name = str;
    this.addMouseListener(this);
    }
    public void mouseClicked(MouseEvent event) {
    }
    public void mouseEntered(MouseEvent event) {
     
    }
     
    public void mousePressed(MouseEvent event) {
    	}
    public void mouseExited(MouseEvent arg0) {
    }
    public void mouseReleased(MouseEvent arg0) {
     
    }
     
    public void actionPerformed(ActiveEvent arg0) {
    	 Affichage ac = new Affichage ();
    	}
    	}
    mais je fais le test de votre code et c'est bien le message est bien affiché donc je change le system.out.println("") par l'appel de la classe Affichage: Affichage ac = new Affichage (); mais malheureusement rien ne s'affiche
    donc s'il vous plait comment j'ajoute cette méthode "addActionListener(new ActionListener()" dans la classe bouton? et comment l'appel du classe Affichage se fait?

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    C'est que Affichage() ne fonctionne pas, ou ne fait rien : déjà mets nous le code de cette classe, parce qu'on peut pas deviner ce qu'elle est censée faire. Ensuite, n'y-aurait-il pas des messages d'erreurs que tu pourrais peut être nous donner éventuellement ?
    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 du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    D'accord merci,
    je vous explique le but: la classe Affichage() c'est la classe qui contient une interface qui s'ouvre lorsque je clique sur le bouton "extraction de données", donc j'ai créé une classe Bouton dans le code le suivant: je modifie le code posté précédemment . j'ajoute ActionListner au lieu de MouseListener.
    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
     
    public class Bouton extends JButton implements ActionListener
    {
        private String name;
     
        public Bouton(String strr)
        {
                super(strr);
                this.name = strr;
                this.addActionListener(this);
     
        }
     
    public void mouseClicked(MouseEvent event) {
    }
     
    public void paintComponent(Graphics gr)  
    {}
     
    public void actionPerformed(ActionEvent arg0) {
    	// TODO Auto-generated method stub
     
    }
    	}
    cette classe est appelée dans une autre classe qui permet d'afficher l'interface globale. j’intéresse au bouton (private Bouton bouton = new Bouton("Extraction de connaissances") et j'ajoute la méthode suivante [bouton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
    new Affichage();
    }
    });] dans ce programme.voici le code complet de ce pogramme:

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    public class Acceuil2 extends JFrame {
    /**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    private JPanel container = new JPanel();
    private JPanel pan1 = new JPanel();
    private JPanel pan2 = new JPanel ();
    private Bouton bouton = new Bouton("Extraction de connaissances");
     
    JButton bouton1 = new JButton("ontologie");
    JButton bouton2 = new JButton("1");
    JButton bouton3 = new JButton("Quitter");
    private JLabel label = new JLabel("Application temps réel");
    JPanel surfTotPanel = new JPanel();
    JTextArea grandeZone = new JTextArea(4, 8);
    public Acceuil2(){
    	JScrollPane texteAsc;
    	Font fonte;
    	int tailleInitiale = 12;
    	surfTotPanel.setLayout(new BoxLayout(surfTotPanel,BoxLayout.Y_AXIS));
    	Dimension dimension = new Dimension(70,50);
    	Dimension dimension1 = new Dimension(200,450);
    	surfTotPanel.setPreferredSize(dimension);
    	pan2.setPreferredSize(dimension);
    	pan1.setPreferredSize(dimension1);
    	label.setPreferredSize(dimension);
    	label.setBackground(Color.lightGray);
    label.setOpaque(true);
    this.setTitle("RTO");
    this.setSize(700, 500);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocationRelativeTo(null);
    fonte = new Font("TimesRoman", Font.PLAIN, tailleInitiale);
    grandeZone.setFont(fonte);
    texteAsc = new JScrollPane(grandeZone);
    container.setBackground(Color.white);
    container.setLayout(new BorderLayout());
    container.add(texteAsc, BorderLayout.CENTER);
    container.add(label, BorderLayout.NORTH);
    GridLayout gl = new GridLayout(4, 1);
    bouton.addActionListener(new ActionListener() {
    	public void actionPerformed(ActionEvent arg0) {
    		 new Affichage();
    	}
    });
    pan1.setLayout(gl);
    pan1.add(bouton);
    pan1.add(bouton1);
    pan1.add(bouton2);
    pan1.add(bouton3);
    gl.setVgap(40);
    pan1.setBackground(Color.lightGray);
    pan2.setBackground(Color.lightGray);
    surfTotPanel.setBackground(Color.lightGray);
    container.add(pan1,BorderLayout.EAST);
    container.add(surfTotPanel,BorderLayout.SOUTH);
    container.add(pan2,BorderLayout.WEST);
    Font police = new Font("Times new Roman", Font.CENTER_BASELINE, 30);
    label.setFont(police);
    label.setForeground(Color.blue);
    label.setHorizontalAlignment(JLabel.CENTER);
     
     
    this.setContentPane(container);
    this.setVisible(true);
     
    }
     
     
    public static void main(String[] args){
    	Acceuil2 ac= new Acceuil2 ();
    	ac.setVisible(true);
    }
    }
    j’espère que l'idée est claire maintenant. je vous rappelle le code de classe Affichage():

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     
    public class Affichage {
     
    	public static void main(String[] args) throws ClassNotFoundException {
     
    		/* Création du parseur */
    		SAXBuilder builder = new SAXBuilder();
     
    		File fichierXML = new File("Exercice1.xml");
    		Document document; 
     
     
    		try {
    			/* Parsing du fichier */
    			document = builder.build(fichierXML);
     
    			/* Racine du document XML : dans notre cas <diagramme> */
    			Element rootNode = document.getRootElement();
    			List<Element> elmts=rootNode.getChildren();
    			List<String> temps = new ArrayList<String>();
    		    List<String> autres = new ArrayList<String>();
    			parserFichier(elmts,temps,autres);
    			window(temps,autres);
     
     
    		} catch (JDOMException e) {
    			e.printStackTrace(System.out);
    		} catch (IOException e) {
    			e.printStackTrace(System.out);
    		}
     
    	}
    	public static void addOnce(List<String> list, String text) {
    		   if ( !list.contains(text) ) list.add(text);
    		}
    	public static void collect(List<String> list, Element elmt, boolean addText) {
     
    	    if ( addText ) {
    	        addOnce(list, elmt.getName()+ "  nom=" +elmt.getText());
    	    }
    	    else{ addOnce(list, elmt.getName()); }
    	}
     
    	public static void parserFichier(List<Element> elmts, List<String> temps, List<String> autres) throws ClassNotFoundException{
    		   for (Element elmt : elmts) {
    		      List<Element> children = elmt.getChildren();
    		      if(("instant".equals(elmt.getName()))||("intervalle".equals(elmt.getName()))||("event".equals(elmt.getName()))) {
    		             collect( temps, elmt, children.isEmpty() );
    		             for (Element child : children) {
    		            	 collect(temps,child,elmt.equals(children));
    		             }
    		      }
    		      else{
    		             collect( autres, elmt, children.isEmpty() );
     
    		      if(!children.isEmpty()){
    			  parserFichier( children, temps, autres ); 
    		      }
    		      }
    		   }
    		}
    	public static void window( List<String> temps, List<String> autres){
    		JScrollPane texteAsc;
    		JScrollPane texteAsc1;
    		JLabel label = new JLabel("Extraction de connaissances");
    		JFrame window=new JFrame("extraction connaissances"); 
    		JTextArea grandeZone = new JTextArea(7,10);
    		JTextArea grandeZone1 = new JTextArea(7, 10);
    		texteAsc = new JScrollPane(grandeZone);
    		texteAsc1 = new JScrollPane(grandeZone1);
    		JPanel container = new JPanel();
    		JPanel surfTotPanel = new JPanel();
    		JPanel surfTotPanel2 = new JPanel();
    		surfTotPanel.setLayout(new BoxLayout(surfTotPanel,BoxLayout.Y_AXIS));
    		Dimension dimension = new Dimension(250,400);
    		surfTotPanel.setPreferredSize(dimension);
    		surfTotPanel2.setLayout(new BoxLayout(surfTotPanel2,BoxLayout.Y_AXIS));
    		Dimension dimension2 = new Dimension(250,400);
    		surfTotPanel2.setPreferredSize(dimension2);
    		surfTotPanel.add(texteAsc1);
    		surfTotPanel2.add(texteAsc);
    		container.setLayout(new BorderLayout());
    		label.setHorizontalAlignment(JLabel.CENTER);
    		container.add(label, BorderLayout.NORTH);
    		container.add(surfTotPanel2, BorderLayout.EAST);
    		container.add(surfTotPanel,BorderLayout.WEST);
    		window.setContentPane(container);
    		window.setVisible(true);
    		window.setSize(600,400);
    		Font police = new Font("Andalus", Font.CENTER_BASELINE, 25);
    		label.setFont(police);
    		label.setForeground(Color.blue);
    		StringBuilder texte = new StringBuilder(" ~~concepts décrivent le temps ~~"); 
    		 texte.append( "\n" );
    		StringBuilder texte1 = new StringBuilder("~~concepts décrivent le domaine ~~"); 
    		 texte1.append( "\n" );
    		for( String temp :  temps ) {
    		    texte.append( "\n" ); // pour passer à la ligne suivante
    		    texte.append( "** " ); // un tiret stylisé
    		    texte.append( temp ); // le texte de la ligne
    		}
    		// et à la fin :
    		grandeZone.setText(texte.toString()); 
    		for( String temp1 :  autres ) {
    		    texte1.append( "\n" );
    		   // pour passer à la ligne suivante
    		    texte1.append( "**  " ); // un tiret stylisé
    		    texte1.append( temp1); // le texte de la ligne
    		}
    		// et à la fin :
    		grandeZone1.setText(texte1.toString()); 
    	}
    }

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Pour exécuter le code de la méthode main() de la classe Affichage, il ne faut pas faire new Affichage() (qui ne fait que créer une instance de classe Affichage, en exécutant son constructeur), mais Affichage.main(new String[0]) en l'état. Le mieux étant de faire une méthode qui fait ce qu'elle doit faire, et de l'appeler, d'un côté dans main(String[]) et l'autre dans actionPerformed(). Il faut revoir un peu les bases là (les classes, les méthodes, les constructeurs, à quoi sert la méthode main(), tout ça...).

    Tu peux aussi faire, par exemple (ce qui te permet d'éviter à avoir à passer un paramètre bidon (le new String[0]) :

    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
    public class Affichage {
     
            public static void main(String[] args) {
                 try {
                    affichage();
                 } catch(ClassNotFoundException e) {
                    e.printStackTrace();
                 }
            }
     
    	public static affichage() throws ClassNotFoundException {
     
    		/* Création du parseur */
    		SAXBuilder builder = new SAXBuilder();
     
    		File fichierXML = new File("Exercice1.xml");
    		Document document; 
     
                    ... tout le reste du code qu'il y avait dans main
     
           }
     
     }
    et pour l'ActionListener :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    button.addActionListener(new ActionListener() {
     
    			@Override
    			public void actionPerformed(ActionEvent event) {
                                    try {
    			          	Affichage.affichage();
                                     } catch(ClassNotFoundException e) {
                                              e.printStackTrace();
                                     }
    			}
     
    });
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] interagir avec des équipements telecom
    Par Abydos Business Group dans le forum C#
    Réponses: 2
    Dernier message: 09/01/2007, 13h58
  2. problème de avec des boutons
    Par babap1 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 04/01/2007, 09h13
  3. [C#] Message box avec des boutons diff.
    Par BoOom dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/04/2006, 11h47
  4. Afficher un fond en arrière plan avec des boutons
    Par eGen dans le forum Agents de placement/Fenêtres
    Réponses: 15
    Dernier message: 03/04/2005, 23h37

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