S'inscrire ! Pass oublié ?
Hyjoo
Portail Forums Jeux Flash Chat IRC Annuaire
Google

[Problème programmation Java] Methode et Interface graphique
Section : Informatique
Logiciels et materiel PC


Actualiser  Hyjoo > Forums > Le village > Informatique > [Problème programmation Java] Methode et Interface graphique

[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.)

 
Rechercher dans la discussion
 Problème programmation Java Methode et Interface graphique...
 Informatique : Logiciels et materiel PC
29/05/2008, 15h29 #1
demon king 
Archange

demon king

[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<livreLeslivres = new ArrayList<livre>();      
    private List<
genreLesgenres = new ArrayList<genre>();    
    private List<
auteurLesauteurs = new ArrayList<auteur>();
    public 
int ep 1;
    public List<
livreget_livres(){
        return 
Leslivres;
    }
    
    public List<
genreget_genres(){
        return 
Lesgenres;
    }
    
    public List<
auteurget_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 ItemListenerActionListener{
    
    
bibliotheque mabiblio = new bibliotheque();
        
    public 
void ajout_romanbibliotheque 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(ListeaccueilGBD);
        
        
        
GBD.gridx 0;
        
GBD.gridy 2;
        
conteneuracc.add(BoutonQuitterGBD);
        
        
//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_MESSAGEnull// 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(
                    
nullitevt.getItem().toString(), "test"JOptionPane.PLAIN_MESSAGE);
        }
        else if(
itevt.getItem().toString()  == "Ajouter un Genre"){
            
JOptionPane.showMessageDialog(
                    
nullitevt.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(null15);
    
     
JLabel Label2 = new JLabel ("année de Parution :" );
     
JTextField anneelivre = new JTextField(null5);
    
     
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(null25);
     
JTextField var2 = new JTextField(null25);
    
     
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(Label1GBD);
        
GBD.gridx 1;
        
GBD.gridy 1;
        
conteneuracc.add(nomlivreGBD);
        
GBD.gridx 0;
        
GBD.gridy 2;
        
conteneuracc.add(Label2GBD);
        
GBD.gridx 1;
        
GBD.gridy 2;
        
conteneuracc.add(anneelivreGBD);
         
GBD.gridx 0;
        
GBD.gridy 3;
        
conteneuracc.add(Label5GBD);
        
GBD.gridx 1;
        
GBD.gridy 3;
        
conteneuracc.add(var2GBD);
        
GBD.gridx 0;
        
GBD.gridy 4;
        
conteneuracc.add(Label6GBD);
        
GBD.gridx 1;
        
GBD.gridy 4;
        
conteneuracc.add(var1GBD);
        
        
GBD.gridx 0;
        
GBD.gridy 5;
        
conteneuracc.add(validerGBD);
        
        
        
//Container go
        
setContentPane(conteneuracc);
        
     }
    
     public 
void actionPerformed(ActionEvent evt){
         
String nom nomlivre.getText();
         
int annee Integer.parseInt(anneelivre.getText());

             
String synopsis var2.getText();
             
String editeurvar1.getText();
             
roman monroman = new roman();
             
monroman.init(nomanneesynopsisediteur);
     }



PS: Je n'ai mis que là ou j'ai des soucis.

Dernière modification par demon king : 30/05/2008 à 15h39.
demon king est déconnecté(e)
29/05/2008, 17h28 #2
lape 
Pégase

lape

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
lape est déconnecté(e)
29/05/2008, 17h34 #3
demon king 
Archange

demon king

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.
demon king est déconnecté(e)
30/05/2008, 09h28 #4
Vidow 
Séraphin
Modérateur Info

Vidow

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.
Vidow est déconnecté(e) Voir une photo de Vidow sur son profil
30/05/2008, 10h54 #5
lape 
Pégase

lape

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 !
lape est déconnecté(e)
30/05/2008, 11h56 #6
demon king 
Archange

demon king

Re : [Problème programmation Java] Methode et Interface graphique

Citation
Posté par Vidow
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.
demon king est déconnecté(e)
30/05/2008, 13h58 #7
lape 
Pégase

lape

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.
lape est déconnecté(e)
30/05/2008, 14h58 #8
demon king 
Archange

demon king

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.
demon king est déconnecté(e)
30/05/2008, 15h31 #9
lape 
Pégase

lape

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 ?
lape est déconnecté(e)
30/05/2008, 15h37 #10
demon king 
Archange

demon king

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.
demon king est déconnecté(e)
02/06/2008, 10h05 #11
lape 
Pégase

lape

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 !
lape est déconnecté(e)
03/06/2008, 20h45 #12
demon king 
Archange

demon king

Re : [Problème programmation Java] Methode et Interface graphique

Citation
Posté par lape
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 >.<
demon king est déconnecté(e)
04/06/2008, 10h22 #13
lape 
Pégase

lape

Re : [Problème programmation Java] Methode et Interface graphique

Ben dans ton constructeur, le truc qui a comme signature
public ajoutRoman(bibliothèque maBiblio)
ta première instruction doit être :
super(); pour le JInternalFrame !

Tu as le choix entre ces différents constructeurs :
JInternalFrame()
JInternalFrame(String title)
JInternalFrame(String title, boolean resizable)
JInternalFrame(String title, boolean resizable, boolean