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

AWT/Swing Java Discussion :

Utilisation d'une variable en dehors de la classe main


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Octobre 2014
    Messages : 70
    Points : 35
    Points
    35
    Par défaut Utilisation d'une variable en dehors de la classe main
    Bonsoir,

    Je poste car je me retrouve confronté au problème suivant : pour faire mon interface graphique j'utilise un fichier XML (qui contient pour chaque bouton un nom et un chemin pour lancer un exécutable) que je lis grâce à un parser SAX. Je récupère donc le nom de chaque bouton et chemin et les stocke dans deux ArrayList dinstinctes (une pour le nom et une pour l'image) dans ma classe Parser. J'arrive alors depuis le main de ma classe Test à récupérer ces valeurs dans mes ArrayList, et les utilise dans ma classe Test sans problème ... Jusqu'à ce que je doive renseigner le chemin dans mon mouseListener en le récupérant depuis mon ArrayList.

    Je fais passer mes arguments du main de ma classe Test au constructeur de ma classe Test comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     new Test(listNomExe, listNomOutils);
    Ensuite je passe les listes à chacune des méthodes comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public Test (ArrayList listNomExe, ArrayList listNomOutils) 
        {
            initFenetre();
            initEntete();
            initMain();
            mainBoutons(listNomExe);
            initAdvanced();
            advancedBoutons(listNomOutils);
        }
    Cependant je ne sais pas comment faire pour que mon MouseListener récupère ces listes ... J'avais pensé à plusieurs choses :
    - Créer un getter pour mes listes, mais comment ? Je ne peux pas mettre un getter dans ma classe Test car il me dira que je n'ai pas accès a ma liste
    - Je ne peux pas la passer en static pour que chacune de mes méthodes y ait accès
    - Je n'ai pas non plus accès a "gestionnaire", variable que j'utilise dans mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                listNomExe = ((LauncherParser) gestionnaire).getListNomExe();
                listCheminNom = ((LauncherParser) gestionnaire).getListCheminExe();
                listNomOutils = ((LauncherParser) gestionnaire).getListNomOutils();
                listCheminOutils = ((LauncherParser) gestionnaire).getListCheminOutils();
    Pour plus de détails voici le code complet de ma classe Test (la principale) :
    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
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    import java.awt.*;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.io.File;
    import java.io.IOException;
     
    import javax.swing.*;
    import javax.swing.border.Border;
    import javax.swing.border.LineBorder;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
     
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
     
    import java.io.File;
    import java.io.IOException;
    import java.lang.reflect.Array;
    import java.util.ArrayList;
     
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
     
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
     
    public class Test extends JFrame implements MouseListener{
     
    	JFrame fen = new JFrame();
    	int i = 0, espacementHauteur = 3;
    	//JButton boutonsMain[] = new JButton[4];
    	ArrayList<JButton> boutonMain = new ArrayList<JButton>();
    	JButton boutonsAdvanced[] = new JButton[1];
     
        public Test (ArrayList listNomExe, ArrayList listNomOutils) 
        {
            initFenetre();
            initEntete();
            initMain();
            mainBoutons(listNomExe);
            initAdvanced();
            advancedBoutons(listNomOutils);
        }
        public void initFenetre()
        {        
    		fen.setTitle("Launcher");
    		fen.setSize(600, 400);
    		fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		fen.setResizable(false);
    		fen.setLocationRelativeTo(null);
    		fen.setVisible(true);
    		fen.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
        }
        public void initEntete()
        {
     
        	int valNode = 1;
        	JPanel entete = new JPanel();
        	JLabel[] texteEntete = new JLabel[2];
        	JButton boutonHelp = new JButton();
    		entete.setLayout(new GridBagLayout());
    		GridBagConstraints gbc = new GridBagConstraints();
    		texteEntete[0] = new JLabel("      Node id : " + valNode);
    		texteEntete[1] = new JLabel("Impossible d'afficher les coordonnées GPS");
     
    		gbc.gridx = 0;
    		gbc.gridy = 0;
    		gbc.insets = new Insets(espacementHauteur, 0, espacementHauteur, 135); //Insets gère l'espacement(top, left, bot,right)
    		entete.add(texteEntete[0], gbc);
     
    		gbc.gridx = 1;
    		gbc.gridy = 0;
    		gbc.insets = new Insets(espacementHauteur, 0, espacementHauteur, 105);
    		entete.add(texteEntete[1], gbc);
    		gbc.gridx = 2;
    		gbc.gridy = 0;
    		gbc.insets = new Insets(espacementHauteur, -10, espacementHauteur, 20); // -10 pour rapprocher de l'élément à gauche
     
    		entete.add(boutonHelp, gbc);
    		boutonHelp.setIcon(new ImageIcon(getClass().getResource("Images/Help.png")));
    		boutonHelp.setPreferredSize(new Dimension(32, 32));
     
    		entete.setBackground(new Color(184, 229, 255));
    		fen.add(entete);
    		fen.getContentPane().setBackground(new Color(224, 224, 224));
        }
     
        public void initMain()
        {
        	JPanel main = new JPanel();
        	JLabel mainTexte = new JLabel("MAIN APPLICATIONS");
        	main.setLayout(new GridBagLayout());
        	GridBagConstraints gbc = new GridBagConstraints();
     
    		gbc.gridx = 0;
    		gbc.gridy = 0;
    		gbc.insets = new Insets(espacementHauteur, 240, espacementHauteur, 240);
        	main.add(mainTexte, gbc);
     
        	fen.add(main);
        }
     
        public void mainBoutons(ArrayList listNomExe)
        {
        	//JButton boutonsMain[] = new JButton[listNomExe.size()];
    		JPanel mainBoutons = new JPanel();
    		mainBoutons.setBackground(new Color(224, 224, 224));
    		mainBoutons.setPreferredSize(new Dimension(600, 140));
    		mainBoutons.setLayout(new FlowLayout(FlowLayout.LEFT, 55, 7));
     
    		for (i = 0; i < listNomExe.size(); i++) 
    		{
    			JButton bouton = new JButton();
    			try
    			{
    			bouton = new JButton(""+listNomExe.get(i), (new ImageIcon(getClass().getResource("Images/" + listNomExe.get(i) +".png"))))
    			{
    				public Point getToolTipLocation(MouseEvent e) {
    		        return new Point(25, -20);
    		      }
    			};
    			}
    			catch(NullPointerException e)
    			{
    				bouton = new JButton(""+listNomExe.get(i), (new ImageIcon(getClass().getResource("Images/erreur.png"))))
    				{
    					public Point getToolTipLocation(MouseEvent e) {
    			        return new Point(25, -20);
    			      }
    				};
    			}
    			bouton.setToolTipText("Ca c'est " + listNomExe.get(i)); // passer à du html si on veut mettre des retours à la ligne
    			ToolTipManager.sharedInstance().setDismissDelay(10000);
    			bouton.setPreferredSize(new Dimension(130, 60));
    			bouton.setVerticalTextPosition(SwingConstants.BOTTOM);
    			bouton.setHorizontalTextPosition(SwingConstants.CENTER);
    			Border thickBorder = new LineBorder(new Color(200,173,127), 1);
    			bouton.setBackground(new Color(224, 224, 224));
    			bouton.setBorder(thickBorder);
    			bouton.addMouseListener(this);
     
    			boutonMain.add(bouton);
    			mainBoutons.add(boutonMain.get(i));
     
    		}
    		fen.add(mainBoutons);	
        }
     
        public void initAdvanced()
        {
        	JPanel advanced = new JPanel();	
        	JLabel advancedTexte = new JLabel("ADVANCED TOOLS");
        	advanced.setLayout(new GridBagLayout());
        	GridBagConstraints gbc = new GridBagConstraints();
     
    		gbc.gridx = 0;
    		gbc.gridy = 0;
    		gbc.insets = new Insets(espacementHauteur, 245, espacementHauteur, 245);
        	advanced.add(advancedTexte, gbc);
        	fen.add(advanced);
        }
     
        public void advancedBoutons(ArrayList listNomOutils)
        {
        	JButton boutonsAdvanced[] = new JButton[listNomOutils.size()];
        	JPanel advancedBoutons = new JPanel();
        	advancedBoutons.setBackground(new Color(224, 224, 224));
        	advancedBoutons.setPreferredSize(new Dimension(600, 140));
     
    		advancedBoutons.setLayout(new FlowLayout(FlowLayout.LEFT, 55, 7));
    		for (i = 0; i < listNomOutils.size(); i++) 
    		{
    			try
    			{
    				boutonsAdvanced[i] = new JButton(""+listNomOutils.get(i), (new ImageIcon(getClass().getResource("Images/" + ""+listNomOutils.get(i) +".png"))))
    				{
    					public Point getToolTipLocation(MouseEvent e) {
    			        return new Point(25, -20);
    			      }
    				};
    			}
    			catch(NullPointerException e)
    			{
    				boutonsAdvanced[i] = new JButton(""+listNomOutils.get(i), (new ImageIcon(getClass().getResource("Images/erreur.png"))))
    				{
    					public Point getToolTipLocation(MouseEvent e) {
    			        return new Point(25, -20);
    			      }
    				};				
    			}
    			boutonsAdvanced[i].setToolTipText("Ca c'est " + boutonsAdvanced[i].getText());
    			boutonsAdvanced[i].setPreferredSize(new Dimension(130, 60));
    			boutonsAdvanced[i].setVerticalTextPosition(SwingConstants.BOTTOM);
    			boutonsAdvanced[i].setHorizontalTextPosition(SwingConstants.CENTER);
    			Border thickBorder = new LineBorder(new Color(200,173,127), 1);
    			boutonsAdvanced[i].setBackground(new Color(224, 224, 224));
    			boutonsAdvanced[i].setBorder(thickBorder);
    			boutonsAdvanced[i].addMouseListener(this);
     
    			advancedBoutons.add(boutonsAdvanced[i]);
    		}
        	fen.add(advancedBoutons);
        }
     
    	@Override
    	public void mouseClicked(MouseEvent e) {
    		// TODO Auto-generated method stub
     
    		if(e.getSource() == boutonMain.get(0))
    		{
    			Runtime runtime = Runtime.getRuntime();
    			try {
    				runtime.exec(new String[] { "C:\\Windows\\notepad.exe" } );
    			} catch (IOException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}
    		}
    	}
     
    	@Override
    	public void mouseEntered(MouseEvent e) {
    		// TODO Auto-generated method stub
    		JButton button = (JButton) e.getSource();
    		Border thickBorder = new LineBorder(new Color(200,173,127), 3);
    		button.setBorder(thickBorder);
    		button.setBackground(new Color(102,153,255));
    	}
     
    	@Override
    	public void mouseExited(MouseEvent e) {
    		// TODO Auto-generated method stub
    		JButton button = (JButton) e.getSource();
    		Border thickBorder = new LineBorder(new Color(200,173,127), 1);
    		button.setBorder(thickBorder);
    		button.setBackground(new Color(224, 224, 224));
    	}
     
    	@Override
    	public void mousePressed(MouseEvent e) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void mouseReleased(MouseEvent e) {
    		// TODO Auto-generated method stub
     
    	}
     
        public static void main(String[] args) 
        {
     
            String fileName = "C:/Launcher/V1/config.xml";
     
            ArrayList listNomExe = new ArrayList();
            ArrayList listCheminNom = new ArrayList();
            ArrayList listNomOutils = new ArrayList();
            ArrayList listCheminOutils = new ArrayList();
     
            try {
                // création d'une fabrique de parseurs SAX!
                SAXParserFactory fabrique = SAXParserFactory.newInstance();
                // création d'un parseur SAX
                SAXParser parseur = fabrique.newSAXParser();
                // lecture d'un fichier XML avec un DefaultHandler!
                File fichier = new File(fileName);
                DefaultHandler gestionnaire = new LauncherParser();
                parseur.parse(fichier, gestionnaire);
     
                listNomExe = ((LauncherParser) gestionnaire).getListNomExe();
                listCheminNom = ((LauncherParser) gestionnaire).getListCheminExe();
                listNomOutils = ((LauncherParser) gestionnaire).getListNomOutils();
                listCheminOutils = ((LauncherParser) gestionnaire).getListCheminOutils();
     
            } catch (ParserConfigurationException pce) {
                System.out.println("Erreur de configuration du parseur");
                System.out.println("Lors de l'appel à* newSAXParser()");
            } catch (SAXException se) {
                System.out.println("Erreur de parsing");
                System.out.println("Lors de l'appel à* parse()");
            } catch (IOException ioe) {
                System.out.println("Erreur d'entrée/sortie");
                System.out.println("Lors de l'appel à* parse()");
            }
            new Test(listNomExe, listNomOutils);
        }
     
        public void ramene(LauncherParser gestionnaire)
        {
     
        }
    }
    Et le code de ma classe LauncherParser si nécessaire :
    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
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Scanner;
     
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
     
    public class LauncherParser extends DefaultHandler {
     
    	private StringBuffer buffer;
    	int i = 0, j = 0, indice = 0;
    	ArrayList listNomExe = new ArrayList();
    	ArrayList listCheminExe = new ArrayList();
    	ArrayList listNomOutils = new ArrayList();
    	ArrayList listCheminOutils = new ArrayList();
     
        public LauncherParser() {
            super();
            buffer = new StringBuffer();
        }
    	@Override
    	public void characters(char[] ch, int start, int length) throws SAXException {
    		// TODO Auto-generated method stub
    		//super.characters(ch, start, length);
            String lecture = new String(ch, start, length);
            if (buffer != null) {
                buffer.append(lecture);
            }
    	}
     
    	@Override
    	public void startElement(String uri, String localName, String qName,
    			Attributes attributes) throws SAXException {
    		// TODO Auto-generated method stub
    		//super.startElement(uri, localName, qName, attributes);
    		//System.out.println("J'ai trouvé cet élément : " + qName);
    		if(qName.equals("exe") || qName.equals("bouton") || qName.equals("outils"))
    		{
    			buffer = null;
    		}
    		else
    		{
    			buffer = new StringBuffer();
    		}
     
    	}
     
    	@Override
    	public void endElement(String uri, String localName, String qName)
    			throws SAXException {
    		// TODO Auto-generated method stub
    		//super.endElement(uri, localName, qName);
    		if(buffer != null)
    		{
    			if(indice == 0)
    			{
    				if(qName.equals("nom"))
    				{
     
    						listNomExe.add(buffer);
    						setListNomExe(listNomExe);
     
    				}
    				if(qName.equals("chemin"))
    				{
    					listCheminExe.add(buffer);
    				}
    			}
    			else if (indice == 1)
    			{
    				if(qName.equals("nom"))
    				{
     
    						listNomOutils.add(buffer);
    						setListNomOutils(listNomOutils);
     
    				}
    				if(qName.equals("chemin"))
    				{
    					listCheminOutils.add(buffer);
    				}
    			}
    		}
    		if(qName.equals("bouton"))
    		{
    			buffer = null;
    		}
    		buffer = null;
    		if(qName.equals("exe"))
    		{
    			indice = 1;
    			// A la fin des boutons exe on passe indice à 1 pour rentrer les données dans la deuxième liste
    		}
     
    	}
    	public ArrayList getListNomOutils() {
    		return listNomOutils;
    	}
    	public void setListNomOutils(ArrayList listNomOutils) {
    		this.listNomOutils = listNomOutils;
    	}
    	public ArrayList getListCheminOutils() {
    		return listCheminOutils;
    	}
    	public void setListCheminOutils(ArrayList listCheminOutils) {
    		this.listCheminOutils = listCheminOutils;
    	}
    	public ArrayList getListNomExe() {
    		return listNomExe;
    	}
    	public void setListNomExe(ArrayList listNomExe) {
    		this.listNomExe = listNomExe;
    	}
    	public ArrayList getListCheminExe() {
    		return listCheminExe;
    	}
    	public void setListCheminExe(ArrayList listCheminExe) {
    		this.listCheminExe = listCheminExe;
    	}
    }
    Voilà, je pense avoir fait le tour. Si je n'ai pas été assez clair n'hésitez pas à me poser la moindre question.

    Etant encore débutant en Java, je suis ouvert à toute remarque ou conseil !

    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 : 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,

    Il y a plusieurs façons de procéder, mais, à mon avis, les 2 plus simples pour toi serait d'Utiliser une map (on pourrait utiliser des classes anonymes, voire des lambas si tu utilises java 8, c'est-à-dire un MouseListener par bouton).


    Une map (par exemple une java.util.HashMap) est un objet qui te permet d'associer une clef avec une valeur. Tu pourras donc associer à chaque instance de JButton, l'élément de la liste qui ta permis de le créer, et donc pouvoir utiliser les informations qui s'y trouvent (un chemin vers un exe si j'ai bien compris). Si tu déclares cette map dans la classe test, comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Test {
     
        private Map<JButton, String> exePathPerButton = new HashMap<>();  // si les chemin de tes exe sont des String
     
        ...
     
    }
    Dans ta méthode où tu créés tous tes boutons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bouton = new JButton(  ... )
    exePathPerButton.put( bouton,   chemin ); // ou chemin est le chemin de l'exe qui correspond au bouton
    Pouir récupérer la bonne association, dans la méthode du mouseListerner (mettons mouseClicked) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String chemin = map.get( e.getSource()) ); // tu récupères le chemin associer au bouton source du clicked

    Maintenant, pour gérer ce qu'il se passe quand on clique sur un JButton, on utilise plutôt un ActionListene aulieu d'un MouseListener. Avec un ActionListener, on a une solution très simple, pour peu qu'on utilise Java 8 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    button.addActionListener( e -> lancerProgrammeExterne( chemin ) )
    avec lancerP'rogralmmeExterne une méthode private de ta classe, avec en paramètre le chemin à utiliser pour lancer l'exe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void lancerProgrammeExterne(String chemin) {
     
    ...
     
    }
    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
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Octobre 2014
    Messages : 70
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    Il y a plusieurs façons de procéder, mais, à mon avis, les 2 plus simples pour toi serait d'Utiliser une map (on pourrait utiliser des classes anonymes, voire des lambas si tu utilises java 8, c'est-à-dire un MouseListener par bouton).


    Une map (par exemple une java.util.HashMap) est un objet qui te permet d'associer une clef avec une valeur. Tu pourras donc associer à chaque instance de JButton, l'élément de la liste qui ta permis de le créer, et donc pouvoir utiliser les informations qui s'y trouvent (un chemin vers un exe si j'ai bien compris). Si tu déclares cette map dans la classe test, comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Test {
     
        private Map<JButton, String> exePathPerButton = new HashMap<>();  // si les chemin de tes exe sont des String
     
        ...
     
    }
    En effet j'aurais procédé comme cela avec une list ( je ne suis pas réticent à l'usage d'une map, simplement je n'en ai jamais utilisé) mais le problème est que je dois pouvoir remplir ma liste de chemin grâce aux informations récupérées dans le fichier lu avec le parser XML, mais je lis celui-ci dans le main de ma classe Test donc je n'ai pas accès ensuite aux listes dans lesquelles je stocke ces éléments dans mes autres méthodes ..

    Ma question est simplement comment je peux procéder comme je procède pour mes autres méthodes, c'est à dire passer ma liste en paramètre pour pouvoir l'utiliser lors de l'évènement MouseClicked. Il me semble qu'on ne puisse pas ajouter d'élément à MouseClicked en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MouseClicked(MouseEvent e, ArrayList maListDeChemin)
    Comme je le disais je pensais soit à une solution permettant de rendre ma liste de chemin static soit à créer un getter pour celle-ci, mais je n'ai pas trouvé comment.

    Merci

  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
    Citation Envoyé par snyler Voir le message
    En effet j'aurais procédé comme cela avec une list ( je ne suis pas réticent à l'usage d'une map, simplement je n'en ai jamais utilisé) mais le problème est que je dois pouvoir remplir ma liste de chemin grâce aux informations récupérées dans le fichier lu avec le parser XML, mais je lis celui-ci dans le main de ma classe Test donc je n'ai pas accès ensuite aux listes dans lesquelles je stocke ces éléments dans mes autres méthodes ..
    Je n'ai pas vraiment comment tu liais tes différentes listes entre elles (d'ailleurs il serait peut-être mieux de faire une classe qui contient toutes les informations de chaque bouton (le nom, le chemin de l'application externe, etc..., et de n'avoir qu'une seule liste), mais quand bien même, tu passes bien une liste en paramètres de la méthode qui créer les boutons, tu peux bien passer plusieurs listes. En tout cas, il n'était pas question, dans mes propos, que la map remplace les listes.

    Citation Envoyé par snyler Voir le message
    Ma question est simplement comment je peux procéder comme je procède pour mes autres méthodes, c'est à dire passer ma liste en paramètre pour pouvoir l'utiliser lors de l'évènement MouseClicked. Il me semble qu'on ne puisse pas ajouter d'élément à MouseClicked en faisant
    Il n'était pas question de passer la map en paramètre de la méthode mouseClicked, que tu ne peux effectivement pas modifier : dans mon exemple, je déclare la map en variable de classe, ce qui permet d'y accèder de toutes les méthodes de la classe (donc d'une part celle qui crée les boutons et d'autres part mouseClicked. Mais, je le répète : n'utilise pas un MouseListener, utilise un ActionListener.
    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
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Octobre 2014
    Messages : 70
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Je n'ai pas vraiment comment tu liais tes différentes listes entre elles (d'ailleurs il serait peut-être mieux de faire une classe qui contient toutes les informations de chaque bouton (le nom, le chemin de l'application externe, etc..., et de n'avoir qu'une seule liste), mais quand bien même, tu passes bien une liste en paramètres de la méthode qui créer les boutons, tu peux bien passer plusieurs listes. En tout cas, il n'était pas question, dans mes propos, que la map remplace les listes.
    C'est vrai que la création de mes boutons n'est peut être pas clair et que je ferai mieux de faire une autre classe à part. En fait depuis le main de ma classe Test je crée mes listes et leur affecte les valeurs venant de mon fichier XML comme cela :
    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
     
            ArrayList listNomExe = new ArrayList();
            ArrayList listCheminNom = new ArrayList();
            ArrayList listNomOutils = new ArrayList();
            ArrayList listCheminOutils = new ArrayList();
     
            try {
                // création d'une fabrique de parseurs SAX!
                SAXParserFactory fabrique = SAXParserFactory.newInstance();
                // création d'un parseur SAX
                SAXParser parseur = fabrique.newSAXParser();
                // lecture d'un fichier XML avec un DefaultHandler!
                File fichier = new File(fileName);
                DefaultHandler gestionnaire = new LauncherParser();
                parseur.parse(fichier, gestionnaire);
     
                listNomExe = ((LauncherParser) gestionnaire).getListNomExe();
                listCheminNom = ((LauncherParser) gestionnaire).getListCheminExe();
                listNomOutils = ((LauncherParser) gestionnaire).getListNomOutils();
                listCheminOutils = ((LauncherParser) gestionnaire).getListCheminOutils();
     
            }
    Ici pour les boutons menant vers un programme je stocke dans une liste le nom (listNomExe) et leur chemin (listCheminNom) et pareil pour les outils. Cependant je vais devoir rajouter aussi une image et une description à mes boutons, tu me conseilles de faire une ArrayList à 4 dimensions ou peut être qu'un type de map sera plus adapté ?

    Citation Envoyé par joel.drigo Voir le message
    Il n'était pas question de passer la map en paramètre de la méthode mouseClicked, que tu ne peux effectivement pas modifier : dans mon exemple, je déclare la map en variable de classe, ce qui permet d'y accèder de toutes les méthodes de la classe (donc d'une part celle qui crée les boutons et d'autres part mouseClicked. Mais, je le répète : n'utilise pas un MouseListener, utilise un ActionListener.
    J'essayais justement de déclarer le moins de variables de classe possible, est-ce vraiment si mauvais que ça d'en utiliser ? J'ai l'impression qu'en fait chacun à plus ou moins son avis sur la question. Cependant pour en revenir à cette histoire de list, j'ai finalement procédé comme cela : j'ajoute en paramètre ma list de chemin lors de l'appel à mon constructeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Test(listNomExe, listNomOutils,listCheminNom);
    Je transmet donc aussi ma list de chemin à mon constructeur Test.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class Test extends JFrame implements MouseListener{
     
    	ArrayList maListDeChemin = new ArrayList();
     
        public Test (ArrayList listNomExe, ArrayList listNomOutils, ArrayList listNomChemin) 
        {
        	maListDeChemin = listNomChemin;
            ...
        }
    Ensuite je déclare une variable de classe maListDeChemin et dans mon constructeur je lui affecte la valeur reçue de listNomChemin. Etait-ce la méthode que tu me conseillais ?

    Citation Envoyé par joel.drigo Voir le message
    Mais, je le répète : n'utilise pas un MouseListener, utilise un ActionListener.
    Je me suis enfait mis à utiliser un MouseListener car je possède aussi des "actions" à effectuer au survol de la souris (remplissage du fond du bouton, bordures ...) et j'en ai donc profité pour utiliser la méthode MouseClicked mais je vais peut être en effet me tourner vers un ActionListener, cela serait plus propre pour des boutons.

  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
    Je voyais quelque chose plutôt comme çà, sans map, (j'ai mis Application en static interne pour avoir qu'une seule classe pour l'exemple, ce n'est pas une obligation, au contraire) :

    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
    114
    115
    116
    117
    118
    119
    120
    121
    public class Demo {
     
    	public static void main(String[] args) {
     
    		SwingUtilities.invokeLater(()-> new Demo());
     
    	}
     
    	public Demo() { 
     
    		List<Application> applications = readApplications();
     
    		JFrame frame = new JFrame("Exemple");
    	    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		frame.getContentPane().add( createPanel(applications) );
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private Component createPanel(List<Application> applications) {
    		JPanel panel = new JPanel();
    		panel.setLayout(new GridBagLayout());
    		GridBagConstraints constraints = new GridBagConstraints();
    		constraints.fill=GridBagConstraints.HORIZONTAL;
    		constraints.insets=new Insets(3, 5, 2, 5); 
    		for(Application application : applications) {
    			JButton button = new JButton(application.getName());
     
                            // action du bouton déléguée à Application.launch() // comme ça on peut éventuellement avoir une arborescence de classe et utiliser la redéfinition pour gérer des cas particuliers
    			button.addActionListener( e -> application.launch() ); 
     
                            // le hover
    			button.addMouseListener( new MouseAdapter() {
    				private Color color;
    				public void mouseEntered(java.awt.event.MouseEvent e) {
    					color = e.getComponent().getBackground();
    					e.getComponent().setBackground(Color.YELLOW);
    				}
    				public void mouseExited(java.awt.event.MouseEvent e) {
    					e.getComponent().setBackground(color);
    				}
    			});
     
    			constraints.gridy++;
    			panel.add(button, constraints);
    		}
    		return panel;
    	}
     
    	private List<Application> readApplications() {
    		// je simule la lecture d'un xml qui contiendrait les informations
    		List<Application> applications = new ArrayList<>();
     
    		applications.add( new Application("Editeur", "c:/windows/notepad.exe", Application.Type.EXE));
    		applications.add( new Application("Le document truc", Application.getDocumentPath("Documents","truc.txt"), Application.Type.OPEN_DOC));
    		applications.add( new Application("L'image de mon avatar", Application.getDocumentPath("Pictures","suricate.jpg"), Application.Type.OPEN_DOC));
    		applications.add( new Application("Forum Java", "http://www.developpez.net/forums/f6/java/", Application.Type.URL));
     
    		return applications;
    	}
     
    	private static class Application {
     
    		public enum Type {
    			EXE, OPEN_DOC, URL;
    		}
     
    		private final String nom; // le nom = le texte du bouton
    		private final String path; // le chemin
    		private final Type type; // le type
     
    		public Application(String nom, String path, Type type) {
    			this.nom = nom;
    			this.path = path;
    			this.type = type;
    		}
     
    		public static String getDocumentPath(String folder, String name) {
    			String userPath = System.getProperty("user.home"); 
    			return userPath + "/" + folder + "/" + name;
    		}
     
    		public final String getName() {
    			return nom;
    		}
     
    		public final void launch() {
    			switch (type) {
    			case EXE:
    				try {
    					new ProcessBuilder(path).start(); // exemple vite fait
    				} catch (IOException e) {
    					throw new RuntimeException(e);
    				}
    				break;
    			case OPEN_DOC:
    				try {
    					Desktop.getDesktop().open(new File(path));
    				} catch (IOException e) {
    					throw new RuntimeException(e);
    				}
    				break;
    			case URL:
    				try {
    					Desktop.getDesktop().browse(new URI(path));
    				} catch (IOException | URISyntaxException e) {
    					throw new RuntimeException(e);
    				}
    				break;
    			default:
    				break;
    			}
    		}
     
    	}
     
    }
    Citation Envoyé par snyler Voir le message
    Je me suis enfait mis à utiliser un MouseListener car je possède aussi des "actions" à effectuer au survol de la souris (remplissage du fond du bouton, bordures ...) et j'en ai donc profité pour utiliser la méthode MouseClicked mais je vais peut être en effet me tourner vers un ActionListener, cela serait plus propre pour des boutons.
    ça n'empêche rien, comme tu peux le voir dans mon exemple.
    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
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Octobre 2014
    Messages : 70
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Je voyais quelque chose plutôt comme çà, sans map, (j'ai mis Application en static interne pour avoir qu'une seule classe pour l'exemple, ce n'est pas une obligation, au contraire) :

    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
    114
    115
    116
    117
    118
    119
    120
    121
    public class Demo {
     
    	public static void main(String[] args) {
     
    		SwingUtilities.invokeLater(()-> new Demo());
     
    	}
     
    	public Demo() { 
     
    		List<Application> applications = readApplications();
     
    		JFrame frame = new JFrame("Exemple");
    	    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		frame.getContentPane().add( createPanel(applications) );
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private Component createPanel(List<Application> applications) {
    		JPanel panel = new JPanel();
    		panel.setLayout(new GridBagLayout());
    		GridBagConstraints constraints = new GridBagConstraints();
    		constraints.fill=GridBagConstraints.HORIZONTAL;
    		constraints.insets=new Insets(3, 5, 2, 5); 
    		for(Application application : applications) {
    			JButton button = new JButton(application.getName());
     
                            // action du bouton déléguée à Application.launch() // comme ça on peut éventuellement avoir une arborescence de classe et utiliser la redéfinition pour gérer des cas particuliers
    			button.addActionListener( e -> application.launch() ); 
     
                            // le hover
    			button.addMouseListener( new MouseAdapter() {
    				private Color color;
    				public void mouseEntered(java.awt.event.MouseEvent e) {
    					color = e.getComponent().getBackground();
    					e.getComponent().setBackground(Color.YELLOW);
    				}
    				public void mouseExited(java.awt.event.MouseEvent e) {
    					e.getComponent().setBackground(color);
    				}
    			});
     
    			constraints.gridy++;
    			panel.add(button, constraints);
    		}
    		return panel;
    	}
     
    	private List<Application> readApplications() {
    		// je simule la lecture d'un xml qui contiendrait les informations
    		List<Application> applications = new ArrayList<>();
     
    		applications.add( new Application("Editeur", "c:/windows/notepad.exe", Application.Type.EXE));
    		applications.add( new Application("Le document truc", Application.getDocumentPath("Documents","truc.txt"), Application.Type.OPEN_DOC));
    		applications.add( new Application("L'image de mon avatar", Application.getDocumentPath("Pictures","suricate.jpg"), Application.Type.OPEN_DOC));
    		applications.add( new Application("Forum Java", "http://www.developpez.net/forums/f6/java/", Application.Type.URL));
     
    		return applications;
    	}
     
    	private static class Application {
     
    		public enum Type {
    			EXE, OPEN_DOC, URL;
    		}
     
    		private final String nom; // le nom = le texte du bouton
    		private final String path; // le chemin
    		private final Type type; // le type
     
    		public Application(String nom, String path, Type type) {
    			this.nom = nom;
    			this.path = path;
    			this.type = type;
    		}
     
    		public static String getDocumentPath(String folder, String name) {
    			String userPath = System.getProperty("user.home"); 
    			return userPath + "/" + folder + "/" + name;
    		}
     
    		public final String getName() {
    			return nom;
    		}
     
    		public final void launch() {
    			switch (type) {
    			case EXE:
    				try {
    					new ProcessBuilder(path).start(); // exemple vite fait
    				} catch (IOException e) {
    					throw new RuntimeException(e);
    				}
    				break;
    			case OPEN_DOC:
    				try {
    					Desktop.getDesktop().open(new File(path));
    				} catch (IOException e) {
    					throw new RuntimeException(e);
    				}
    				break;
    			case URL:
    				try {
    					Desktop.getDesktop().browse(new URI(path));
    				} catch (IOException | URISyntaxException e) {
    					throw new RuntimeException(e);
    				}
    				break;
    			default:
    				break;
    			}
    		}
     
    	}
     
    }


    ça n'empêche rien, comme tu peux le voir dans mon exemple.

    Bonjour joel.drigo, je ne réponds qu'aujourd'hui car j'étais sur un autre projet pendant ce temps. J'ai tout de même eu le temps de me pencher sur le sujet et j'ai finalement réussi à déclarer ma variable de manière à y avoir accès dans toute la classe et j'ai ainsi pu résoudre mon problème, merci de ton aide.

    J'ai cependant une autre question qui n'a rien à voir mais lorsque je lance mon projet, ma fenêtre s'affiche bien sauf mes boutons qui ne s'affichent qu'une fois que j'ai réduit la fenêtre et que je la remet au premier plan. Après avoir fait la manipulation (réduire puis remettre au premier plan) je n'ai pourtant plus aucun problème d'affichage, mes boutons sont là, bien placés et avec la bonne taille. As-tu déjà été confronté à ce genre de problèmes ou as-tu une idée d'où ça pourrait venir ? J'ai essayé en changeant la taille de la fenêtre ou des boutons pour voir mais cela n'a aucun effet.

  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 : 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
    Citation Envoyé par snyler Voir le message
    ...ma fenêtre s'affiche bien sauf mes boutons qui ne s'affichent qu'une fois que j'ai réduit la fenêtre et que je la remet au premier plan. Après avoir fait la manipulation (réduire puis remettre au premier plan).
    C'est typiquement ce qui arrive quand on ajoute les composants à la fenêtre après l'avoir rendue visible. Soit tu crées tout ton interface avant de rendre visible la JFrame, soit, si tu dois la modifier après l'avoir rendue visible, il faut appeler revalidate() sur les conteneurs modifiés (le panel où tu ajoutes le bouton), et repaint().
    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
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Octobre 2014
    Messages : 70
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    C'est typiquement ce qui arrive quand on ajoute les composants à la fenêtre après l'avoir rendue visible. Soit tu crées tout ton interface avant de rendre visible la JFrame, soit, si tu dois la modifier après l'avoir rendue visible, il faut appeler revalidate() sur les conteneurs modifiés (le panel où tu ajoutes le bouton), et repaint().
    En effet c'était cela, j'ai déplacé la ligne ou je rendais ma fenêtre visible et ça marche. Merci beaucoup pour ton aide !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/02/2012, 02h00
  2. Pl/SQL utilisation d'une variable dans un select
    Par larg dans le forum PL/SQL
    Réponses: 17
    Dernier message: 30/11/2004, 17h08
  3. utilisation d'une variable globale
    Par ZZ dans le forum ASP
    Réponses: 3
    Dernier message: 03/12/2003, 19h11
  4. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23
  5. Réponses: 4
    Dernier message: 05/06/2002, 14h35

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