 |  | [Problème programmation Java] Methode et Interface graphique Section : Informatique Logiciels et materiel PC | [Problème programmation Java] Methode et Interface graphique : Discussion sur le forum Informatique (Logiciels et materiel PC : Informations et discussions sur les ordinateurs, les logiciels ou le materiel pc, la programmation et le high tech en général.)  | Problème programmation Java Methode et Interface graphique... Informatique : Logiciels et materiel PC |
|
29/05/2008, 15h29 | #1 | | Archange
| [Problème programmation Java] Methode et Interface graphique | | Bonjour ,
je débute en Java et je souhaite faire une application qui gérerai une bibliotheque, seulement je commence à être un peu largué.... >.<
Voilà la situation, j'ai une classe bibliotheque qui est la base de mon appli. Elle lance l'interface et ensuite lors d'une ajout de livre, je choisis Roman ou Magazine, et ainsi lors de l'ajout par l'utilisateur, je souhaite qu'il puisse sélectionner un genre ou un auteur présent dans les collections de la classe bibliotheque !
Seulement pour arriver à ce stade je passe par 3 classes différentes et je suis un peu perdu car je n'arrive pas à appeller sur la classe "bibliotheque" par le super. qui me renvoit le JFrame en cours d'utilisation, ce que je ne veux pas.
Donc je vous demande si vous connaissez une autre méthode ou alors est ce que je suis parti pour tout recommencer ? (ce qui ne m'étonnerai pas...).voici ma classe principale, bibliotheque. Si je suis dans le faux, expliquez moi comment je doit procéder s'il vous plait parce que là, je rame pas mal  .
Code PHP:
public class bibliotheque {
//private static final long serialVersionUID = 1L; private List<livre> Leslivres = new ArrayList<livre>(); private List<genre> Lesgenres = new ArrayList<genre>(); private List<auteur> Lesauteurs = new ArrayList<auteur>(); public int ep = 1; public List<livre> get_livres(){ return Leslivres; } public List<genre> get_genres(){ return Lesgenres; } public List<auteur> get_auteurs(){ return Lesauteurs; } public static void main(String[] args) { // TODO Auto-generated method stub bibliotheque mabiblio = new bibliotheque(); fenetreaccueil fenetre = new fenetreaccueil(mabiblio); } }
|
Voici la classe fenetreaccueil qui va lancer l'interface graphique de l'application.
Code PHP:
class fenetreaccueil extends JFrame implements ItemListener, ActionListener{ bibliotheque mabiblio = new bibliotheque(); public void ajout_roman( bibliotheque mabiblio){ ajoutroman monroman = new ajoutroman(mabiblio); } public void ajout_magazine(bibliotheque mabiblio){ ajoutmagazine monmagazine = new ajoutmagazine(mabiblio); } // call constructor button JComboBox Listeaccueil = new JComboBox(); JButton BoutonQuitter = new JButton("Quitter");
public fenetreaccueil(bibliotheque mabiblio){ this.mabiblio = mabiblio; //window size setSize(600,400); //action when close window setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // window visible setVisible(true); // container definition Container conteneuracc = getContentPane(); //container color conteneuracc.setBackground(Color.WHITE); // Construction d'une grille pour la disposition GridBagLayout monLayout = new GridBagLayout(); GridBagConstraints GBD = new GridBagConstraints(); // add Layout on Container conteneuracc.setLayout(monLayout); // Constitution de la liste Listeaccueil.addItem(""); Listeaccueil.addItem("Afficher Les Livres"); Listeaccueil.addItem("Ajouter un Livre"); Listeaccueil.addItem("Ajouter un Auteur"); Listeaccueil.addItem("Ajouter un Genre"); //ajout d'un écouteur sur le bouton et sur la liste BoutonQuitter.addActionListener(this); Listeaccueil.addItemListener(this); // ajout des composants au conteneur GBD.gridx = 0; GBD.gridy = 0; conteneuracc.add(Listeaccueil, GBD); GBD.gridx = 0; GBD.gridy = 2; conteneuracc.add(BoutonQuitter, GBD); //Container go setContentPane(conteneuracc); } public void actionPerformed(ActionEvent evt){ System.exit(0); } @SuppressWarnings("static-access") public void itemStateChanged(ItemEvent itevt){ if (itevt.getItem().toString() == "Afficher Les Livres"){ this.setVisible (false) ; this.dispose() ; @SuppressWarnings("unused") livre maListe = new livre(); } else if(itevt.getItem().toString() == "Ajouter un Livre"){ JOptionPane d = new JOptionPane(); // les textes figurant sur les boutons String[] lesTextes={ "Romans", "Magazines"}; String choix = (String) d.showInputDialog(this, "Quel genre de livre est-ce ?", "Choix du livre", JOptionPane.INFORMATION_MESSAGE, null, // pas d’icone lesTextes, // les testes de boutons lesTextes[0]); // le bouton par défaut if(choix == "Romans"){ // fenetreaccueil.this.setVisible (false) ; //fenetreaccueil.this.dispose () ; this.ajout_roman(mabiblio); } else{ this.setVisible (false) ; this.dispose() ; this.ajout_magazine(mabiblio);
} } else if(itevt.getItem().toString() == "Ajouter un Auteur"){ JOptionPane.showMessageDialog( null, itevt.getItem().toString(), "test", JOptionPane.PLAIN_MESSAGE); } else if(itevt.getItem().toString() == "Ajouter un Genre"){ JOptionPane.showMessageDialog( null, itevt.getItem().toString(), "test", JOptionPane.PLAIN_MESSAGE); } } }
|
Voici la classe ajout roman ou je souhaite récupérer la collection.
Code PHP:
class ajoutroman extends JInternalFrame implements ActionListener{
// Je souhaite retourner sur l'objet mabiblio pour récupérer les collections.//
public void ajoutRoman(bibliotheque maBiblio){ this.mabiblio = maBiblio; } JLabel Label1 = new JLabel (); JTextField nomlivre = new JTextField(null, 15); JLabel Label2 = new JLabel ("année de Parution :" ); JTextField anneelivre = new JTextField(null, 5); JLabel Label5 = new JLabel ("Résumé :"); JLabel Label6 = new JLabel ("Editeur :" );
//preparation des variables qui seront utilisées selon le type de livre; JTextField var1 = new JTextField(null, 25); JTextField var2 = new JTextField(null, 25); JButton valider = new JButton("Valider"); public ajoutroman(bibliotheque mabiblio){
mabiblio.get_livres().size(); this.setSize(600,400); //action when close window this.setDefaultCloseOperation(JInternalFrame.EXIT_ON_CLOSE); // window visible this.setVisible(true); // container definition Container conteneuracc = getContentPane(); //container color conteneuracc.setBackground(Color.WHITE); // Construction d'une grille pour la disposition GridBagLayout monLayout = new GridBagLayout(); GridBagConstraints GBD = new GridBagConstraints(); // add Layout on Container conteneuracc.setLayout(monLayout); //ajout d'un écouteur sur le bouton valider.addActionListener(this); //ajout des composants. GBD.gridx = 0; GBD.gridy = 1; conteneuracc.add(Label1, GBD); GBD.gridx = 1; GBD.gridy = 1; conteneuracc.add(nomlivre, GBD); GBD.gridx = 0; GBD.gridy = 2; conteneuracc.add(Label2, GBD); GBD.gridx = 1; GBD.gridy = 2; conteneuracc.add(anneelivre, GBD); GBD.gridx = 0; GBD.gridy = 3; conteneuracc.add(Label5, GBD); GBD.gridx = 1; GBD.gridy = 3; conteneuracc.add(var2, GBD); GBD.gridx = 0; GBD.gridy = 4; conteneuracc.add(Label6, GBD); GBD.gridx = 1; GBD.gridy = 4; conteneuracc.add(var1, GBD); GBD.gridx = 0; GBD.gridy = 5; conteneuracc.add(valider, GBD); //Container go setContentPane(conteneuracc); } public void actionPerformed(ActionEvent evt){ String nom = nomlivre.getText(); int annee = Integer.parseInt(anneelivre.getText());
String synopsis = var2.getText(); String editeur= var1.getText(); roman monroman = new roman(); monroman.init(nom, annee, synopsis, editeur); } }
|
PS: Je n'ai mis que là ou j'ai des soucis. Dernière modification par demon king : 30/05/2008 à 15h39. | | |
29/05/2008, 17h28 | #2 | | Pégase
| Re : [Problème programmation Java] Methode et Interface graphique | | Huuum je ne suis pas chez moi et il y a pas mal de code à lire mais déjà je peux te conseiller déjà de ne pas hériter de JFrame c'est moche variable ou champ c'est mieux, pareil pour les listeners c'est mieux en classe anonyme !
Essaie de commencer tes noms de classe par des majuscules et les noms de variables et méthodes par une minuscule
Sinon par rapport à ton appli je ne vois pas trop ce que tu essaies de faire exactement mais si tu veux afficher des listes (bouquins, genre, auteur, ...) utilises des JList ou tu peux permettre de selectionné zero, une ou plusieurs lignes, et si tu veux faire ça propre comme il faut : MFC.
Je ne pense pas t'avoir aidé mais si tu as une question un peu plus précise, ou n'importe quoi je pense pouvoir t'aider, hésite pas à demander. Tu peux aussi m'envoyer ton projet en entier que je regarde, j'ai un petit exemple de bibliothèques (basique) utilisant une JList que je pourrais t'envoyer si tu veux.
Sinon je ne sais pas ce que tu utilises pour coder mais je te conseil d'utiliser Eclipse qui est open source codé en java wouhou (lourd en ressource mais bien pratique et utilisable sous unix et windaube) ! Ou dans le même style netbeans !
Bon code  | | |
29/05/2008, 17h34 | #3 | | Archange
| Re : [Problème programmation Java] Methode et Interface graphique | | Bah en faite, mon appli part de la classe "bibliotheque" pour appeller une JFrame de la classe "Fenetreaccueil", il y a des opérations et après on rappelle une autre JFrame sur la classe "ajoutroman".
ça fait donc "bibliotheque" > "fenetreaccueil "> "ajoutroman".
Cependant, dans la classe "ajoutroman", je souhaite récupérer un paramètre qui est dans la classe bibliotheque mais je n'y arrive pas. Je cherche donc à concerver Mabiblio jusqu'à la classe "ajoutroman". je ne sais pas si je suis assez clair.
A vrai dire je me suis probablement débrouiller comme un manche et je ne sais pas comment procéder exactement (je n'ai jamais eu de cours la dessus).
Ou alors faut m'indiquer comment créer plusieurs fenêtres pour pouvoir utiliser les méthodes d'une classe déjà instancier ailleur
.
PS: J'utilise Eclipse ^^. Dernière modification par demon king : 29/05/2008 à 20h15. | | |
30/05/2008, 10h54 | #5 | | Pégase
| Re : [Problème programmation Java] Methode et Interface graphique | | Vidow tu n'étais pas réveillé ce matin ?
Et si tu as besoin de ta classe bibliothèque dans ajoutroman (ce qui parait assez logique) comme le dit Vidow (en français pas réveillé) met un champ pour ta bibliothèque dans ta classe d'ajout ou tu lui passe ta bibliothèque à la création. Et c'est vrai que c'est mieux d'avoir une seule JFrame.
Eclipse gueule pas sur les Majuscule et Minuscule ?  Sinon les supress-warnings c'est pas jolie ! | | |
30/05/2008, 11h56 | #6 | | Archange
| Re : [Problème programmation Java] Methode et Interface graphique | | | | | | Si j'ai bien compris, tu souhaiterais créé une boite de diéalogue pour afficher le formulaire d'ajout d'un roman.
Plustot que de créé une nouvelle JFrame, regarde plustot du coté de JInternalFrame.
Pour appeler des méthode public de ton objet Bibliothéque, tu peux tout as faire créé une classe qui étends JInternalFrame, qui compterait dans ses attributs ton objet Bibliothéque. | |  | |  |
|
Bah j'ai jeté un coup d'oeil sur le JInternalframe, le seul soucis c'est que je ne trouve aucun tutoriel en ce qui concerne ceci et je ne saisis pas tout de l'intérêt de cette frame. Que fait-elle exactement et comment je peux faire pour faire passer mon objet bibliotheque dans la classe qui étend JInternalFrame ? (J'avais prévenu que je débutait en Interface graphique, désolé).
Je voudrais aussi savoir comment je pourrais envoyer ma bibliotheque par le biai d'un bouton via ActionListener. Je suis vraiment un noob XD; Dernière modification par demon king : 30/05/2008 à 12h27. | | |
30/05/2008, 13h58 | #7 | | Pégase
| Re : [Problème programmation Java] Methode et Interface graphique | | As-tu été lire la javadoc ? en Java c'est ton meilleur amis avec google
javadoc des api : ici
pour JInternalFrame : ici
Pour passer la bibliothèque dans la classe JInternalFrame il suffit de la passer dans le constructeur :
tu crée un champ bibliothèque maBilblio;
constructeur :
Code:
ajoutRoman(bibliothèque maBiblio){
this.maBiblio = maBiblio;
...
} |
pour la construction tu fait :
Code: new ajoutRoman(maBiblio); |
ensuite tu pourras l'utiliser dans toute les méthodes de ta classe ajoutRoman !
qu'est ce que tu veux dire par envoyer ta bibliothèque en cliquant sur un bouton ?
Si tu veux mettre a jour ta bibliothèque lorsque tu appuie sur ton bouton valider il suffit de lui ajouter des méthodes d'ajout (à la classe bibliothèque) et de les appeler dans ta classe ajoutRoman.
par exemple dans bibliothèque :
Code: public void add_livre(livre l){
lesLivres.add(l);
} |
ensuite dans ajoutRoman apres avoir récupérer les champs dans le action performed :
Code:
maBiblio.add_livre(monroman); |
Quelque chose comme ça mais cela va te faire changer un peu la structure actuel de ton programme vu que tu créer ton objet ajoutroman dans la classe fenetre qui ne contient pas ta bibliothèque sauf si tu passe ta bibliothèque en argument de ta méthode ajout_roman() dans la classe fenetre.
Oula j'arrive a m'embrouiller tout seul  Dernière modification par lape : 30/05/2008 à 14h07. | | |
30/05/2008, 14h58 | #8 | | Archange
| Re : [Problème programmation Java] Methode et Interface graphique | | En fait, ce que je veux dire c'est que la classe ajoutroman passe par la classe fenetreaccueil (par un bouton) qui est lancée dans la classe bibliotheque.
ma question est comment je peux passer mabiblio jusqu'à ajoutroman ? En fait j'ai une érreur qui apparait et il semblerait que c'est parce que le bouton gène.
Autre soucis, mon JinternalFrame n'est pas visible et je ne comprend pas pourquoi ....
PS: Je suis faché avec l'anglais  Dernière modification par demon king : 30/05/2008 à 15h32. | | |
30/05/2008, 15h31 | #9 | | Pégase
| Re : [Problème programmation Java] Methode et Interface graphique | | Ben une solution serait de conserver dans fenetreaccueil un champ bibliothèque également.
lors de la création tu ferais
Code: new fenetreaccueil(this); |
comme ca tu peux ensuite le passer également a ajoutroman.
Sinon quel est l'erreur ?
L'instruction setVisible(true) de ta JFrame principal est censé être la dernière instruction de ton programme. ça vient peut-être de là sinon pourrais-tu reposter entièrement ton nouveau code ? | | |
30/05/2008, 15h37 | #10 | | Archange
| Re : [Problème programmation Java] Methode et Interface graphique | | Je n'ai pas d'erreur à proprement parler. juste que la JInternalFrame ne s'affiche pas >.<.
Le SetVisible de cette frame est pourtant en true...
J'ai fait une MAJ de mon code dans mon premier post. Dernière modification par demon king : 31/05/2008 à 11h39. | | |
02/06/2008, 10h05 | #11 | | Pégase
| Re : [Problème programmation Java] Methode et Interface graphique | | Alors alors :
Code: bibliotheque mabiblio = new bibliotheque(); |
tu peux retirer le new qui ne sers à rien vu qu'ensuite tu fais this.maBiblio = maBiblio; dans le constructeur.
Code: public void ajoutRoman(bibliotheque maBiblio){
this.mabiblio = maBiblio;
} |
Pourquoi faire une méthode ? l'initialisation de la bibliothèque devrait se faire dans le constructeur.
Ensuite pour ton problème je pense qu'il te manque un appel a super dans ton constructeur. (voir constructeur de JInternalFrame pour les paramètres)
Si j'ai le temps j'essaierai de compiler pour voir ce que ça donne !  | | |
03/06/2008, 20h45 | #12 | | Archange
| Re : [Problème programmation Java] Methode et Interface graphique | | | | | | Alors alors :
Code: public void ajoutRoman(bibliotheque maBiblio){
this.mabiblio = maBiblio;
} |
Pourquoi faire une méthode ? l'initialisation de la bibliothèque devrait se faire dans le constructeur.
| |  | |  |
|
Je veux bien utiliser un constructeur, mais ça existe pour une interface graphique ? 
C'est marrant, je n'ai vu ça nulle part ...
Et les seuls tutos sur les JInternalFrame que je trouve sont en Anglais, bien sur >.< | | |
04/06/2008, 10h22 | #13 | | Pégase
| Re : [Problème programmation Java] Methode et Interface graphique | | |
|
|
|