Bonjour,

Je voudrais rajouter une interface graphique à un problème déjà existant.

J'avais commencé avec un Jframe-Jpanel pour ma première fenêtre et ça marchait très bien:
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
 
package mkrss;
import java.awt.FlowLayout;
import java.awt.Dimension;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*; 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import javax.swing.JOptionPane;
 
public class InterfaceGraphique extends JFrame implements ActionListener{
 
 
	private JPanel container = null;//Déclaration de l'objet JPanel	
	private FlowLayout layout = null ;//Déclaration de notre layout
	private JLabel texte = null;//Déclaration de l'objet JLabel
	private JButton bouton = null;//Déclaration du bouton
	private JPanel container2 = null;//Déclaration de l'objet JPanel	
	private FlowLayout layout2 = null ;//Déclaration de notre layout
	private JLabel texte2 = null;//Déclaration de l'objet JLabel
	private JButton bouton2= null;//Déclaration du bouton
	private String UrlRss = null;
 
	private int nombre = 0; //Déclaration du chiffre
			JTextField urlfield = null;
 
	public InterfaceGraphique(){   
		super();		
		build();//On initialise notre fenêtre
	}//Fin du constructeur
 
	public InterfaceGraphique( String  urlfld){
		super();		
		build2(urlfld);//On initialise notre fenêtre
	}//Fin du second constructeur
 
 
	private void build(){
 
		this.setTitle("Morad KALKOUL: parser de flux RSS"); //On donne un titre à l'application
		this.setSize(400,400); //On donne une taille à notre fenêtre
		this.setLocationRelativeTo(null); //On centre la fenêtre sur l'écran
		this.setResizable(true) ; //On interdit la redimensionnement de la fenêtre
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer
		//lors du clic sur la croix
//		On lui spécifie un container principal
		this.setContentPane(getContainer());
	}//fin de build
 
 
	private void build2( String url){
		this.setTitle("Morad KALKOUL: parser de flux RSS"); //On donne un titre à l'application
		this.setSize(400,400); //On donne une taille à notre fenêtre
		this.setLocationRelativeTo(null); //On centre la fenêtre sur l'écran
		this.setResizable(true) ; //On interdit la redimensionnement de la fenêtre
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer
		//lors du clic sur la croix
		//On lui spécifie un container principal
		this.setContentPane(getContainer2());
	}//fin de build
 
	private JPanel getContainer(){
 
		layout = new FlowLayout(); //Instanciation du layout
		layout.setAlignment(FlowLayout.LEFT);//On centre les composants
 
		container = new JPanel() ; //On crée notre objet
		container.setLayout(layout); //On applique le layout
 
		texte = new JLabel() ;//On crée notre objet
		texte.setPreferredSize(new Dimension(250,25)) ;//On lui donne une taille
		texte.setText("Veuillez saisir une l'adresse d'un flux RSS:"); //On lui donne un texte
 
		container.add(texte);//On l'ajoute au container
 
 
		bouton = new JButton () ;//Création du bouton
		bouton.setPreferredSize(new Dimension(125,25)) ;//On lui donne une taille
		bouton.setText("OK") ;//On lui donne un texte
 
		urlfield = new JTextField();
		urlfield.setPreferredSize(new Dimension(75,25));
		container.add(urlfield);
 
 
		bouton.addActionListener(this);//On ajoute la fenêtre en tant qu'écouteur du bouton
 
		container.add(bouton);//On l'ajoute à la fenêtre
 
		return container ;
	}
 
	private JPanel getContainer2(){
 
		try {
 
			Choice maCombo = new Choice();
 
		layout2 = new FlowLayout(); //Instanciation du layout
		layout2.setAlignment(FlowLayout.LEFT);//On centre les composants
 
		container2 = new JPanel() ; //On crée notre objet
		container2.setLayout(layout2); //On applique le layout
 
 
 
		//Remplissage de la liste déroulante.
 
		//fin du remplissage de la liste.
		OutilsDOM monoutil = new OutilsDOM();
 
		String atitre = "";				//variablede travail.
		String adescription = "";    	//variable de travail.
		String alink ="";				//variable de travail.
		Document envfabricdoc;
 
	 	monoutil.OuvrirConnexion(this.UrlRss);	
	 	envfabricdoc = monoutil.CreerFabriqueDocument(monoutil.is);		
	 	NodeList nlitem = envfabricdoc.getElementsByTagName("item");
 
	    for (int i=0 ; i<nlitem.getLength(); i++)
	    {
 
	    	Element item = (Element)nlitem.item(i);
 
	    	/* Affichage des titres et des articles        */
	    	/* et remplissage au fur et à mesure du vector */
 
	    	for (Node child = item.getFirstChild(); child!=null ; child = child.getNextSibling())   
	    	{
 
	    			if (child.getNodeType() == Node.ELEMENT_NODE && ((Element)child).getTagName().equals("title"))
	    			{
	    				atitre = child.getTextContent();	
	    				//System.out.println(i+1 + "\t" + atitre);
	    			}
	    			else if  (child.getNodeType() == Node.ELEMENT_NODE && ((Element)child).getTagName().equals("description"))
	                {  
	    				adescription = child.getTextContent();    
	    				//System.out.println("\t\t" + adescription);
	                }
	            	else if (child.getNodeType() == Node.ELEMENT_NODE && ((Element)child).getTagName().equals("link"))   
	            		{  
	            			alink = child.getTextContent();
	            			//System.out.println("\t\t" + alink);
	            		}
 
	    	} //fin de for
 
	    	//remplissage de ma liste combo
	    	maCombo.add(atitre);
 
	    	//Initialisation d'un élément à ajouter au vecteur.
	    	MkItem anode = new MkItem(urlfield.getText(), atitre, adescription,alink, false);
 
	    	System.out.println(i+1 + "\t" + anode.titre );
	    	System.out.println( "\t");
 
	    	//ajout de l'élément au vecteur.
	    	monoutil.rssvct.ajouter(anode);
 
	    }//fin de for
 
	    container2.add(maCombo);
 
		}//Fin de try
		catch (Exception e2){
 
 
		}//fin de catch
		finally {
 
			return container2 ;	
 
		}//fin de finally
 
 
	}//Fin de container2
 
 
	public void actionPerformed(ActionEvent e){
 
 
		try {
 
 
		}//Fin de try	
	    catch ( Exception e1 ){
 
 
	    }//fin de catch
 
 
	}//Fin de actionPerformed
 
    public static void main(String[] args) throws Exception {
 
 
 	   //InterfaceGraphique gui = new InterfaceGraphique();
 	   //gui.setVisible(true);
    	InterfaceGraphique gui = new InterfaceGraphique("");
    	gui.UrlRss  = String.valueOf(JOptionPane.showInputDialog(null, "Entrez une URL:"));
 
 
 
 
 
		int reponse = JOptionPane.showConfirmDialog(null, "Voulez-vous récupérer ce flux?", 
			"Satisfaction", JOptionPane.YES_NO_OPTION);
 
		if(reponse == JOptionPane.YES_OPTION){
 
		 	   gui.setVisible(true);
 
 
			//JOptionPane.showMessageDialog(null, "Cool :) A la prochaine") ;
		}else if(reponse == JOptionPane.NO_OPTION){
			JOptionPane.showMessageDialog(null, "Bye.") ;
		}
    } //Fin de main
 
 	   //http://tempsreel.nouvelobs.com/file/rss_perm/rss_permanent.xml
 	   //monoutil.TraitementDunFlux(monoutil, gui);
 
}//Fin classe InterfaceGraphique
Le contenu de getContainer2() était dans actionPerformed.
Avant je pouvait récupérer l'url saisie dans getContainer dans une variable urlfield de type JLabel que je rajouter via container.add(urlfield).

Puis j'ai voulu utiliser JOptionPane qui m'a l'air pas mal pour la première saisie.
J'ai donc modifier ma classe comme ci-dessous.
Donc je dsaisie l'url dans une variable de type string dans le main:
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 static void main(String[] args) throws Exception {
 
 
 	   //InterfaceGraphique gui = new InterfaceGraphique();
 	   //gui.setVisible(true);
    	InterfaceGraphique gui = new InterfaceGraphique("");
    	gui.UrlRss  = String.valueOf(JOptionPane.showInputDialog(null, "Entrez une URL:"));
 
		int reponse = JOptionPane.showConfirmDialog(null, "Voulez-vous récupérer ce flux?", 
			"Satisfaction", JOptionPane.YES_NO_OPTION);
 
		if(reponse == JOptionPane.YES_OPTION){
 
		 	   gui.setVisible(true);
 
 
			//JOptionPane.showMessageDialog(null, "Cool :) A la prochaine") ;
		}else if(reponse == JOptionPane.NO_OPTION){
			JOptionPane.showMessageDialog(null, "Bye.") ;
		}
    } //Fin de main
 
 	   //http://tempsreel.nouvelobs.com/file/rss_perm/rss_permanent.xml
 	   //monoutil.TraitementDunFlux(monoutil, gui);
 
}//Fin classe InterfaceGraphique
donc de la façon suivante dans:
gui.UrlRss = String.valueOf(JOptionPane.showInputDialog(null, "Entrez une URL:"));
C'est après que j'ai du mal à l'exploiter.
Dans getContainer2 , je ppense que ma fonction monoutil.OuvrirConnexion(this.UrlRss);
passe mais je n'ai rien dans ma fenêtre c'est à dire pas de liste déroulante.
Eclipse me dit que la combo n'est pas rajouté à ma fenêtre, je sais je ne sais pas gérer les exceptions mais mon bloc finally est apparement foireux, si je pouvais avoir un coup de main la dessus se serait sympa.

Mon second problème est concernant la liste déroulante quelle est l'évènement lorsque je clique qur un évènement de la liste déroulante?

Merci d'avance pour votre aide.

Bonne soirée.