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

Graphisme Java Discussion :

[jFreeChart] Affichage du graphe dans une frame existante


Sujet :

Graphisme Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Points : 11
    Points
    11
    Par défaut [jFreeChart] Affichage du graphe dans une frame existante
    Bonjour,

    Je suis débutant en java et j'essaie d'afficher un graphique dans une jframe.
    J'utilise la bibliothèque jFreeChart et j'arrive pour l'instant à générer une jframe en suivant le tutoriel.
    Le problème est qu'une nouvelle jframe est créée dans laquelle mon graphique apparait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // create and display a frame...
                    ChartFrame frame = new ChartFrame("B", chart);
                    frame.pack();
                    frame.setVisible(true);
    Dans mon projet, j'ai déjà créé une jFrame qui contient mon IHM, notamment un bouton qui permet de générer le graphe.
    Ce que je souhaiterais, c'est que le graphique soit affiché dans mon jFrame1 et non dans un nouveau jFrame.

    PS: Je suis sous netbeans 6.9.1, le reste du programme fonctionne bien, le graphique représente bien mes données stockées dans la BDD.

    Merci d'avance de votre aide

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Utilise un ChartPanel au lieu d'une ChartFrame

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Merci de ta réponse. En fait, j'avais déjà essayé mais je n'arrivais pas à le faire fonctionner. Finalement ça marche; je pense que le problème était au niveau des dimensions du chartpanel.

    Voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ChartPanel chartPanel = new ChartPanel(chart, false);
    chartPanel.setBounds(X1,Y1,Width,Height);
    setContentPane(chartPanel);
    chartPanel.setVisible(true);
    Par contre je viens de galérer pour trouver les dimensions de la fenêtre de l'écran.
    Le seul moyen que j'ai trouvé est de regarder les dimensions de la frame en mode designer et d'empêcher le redimensionnement.

    Le problème vient du fait que je ne vois pas où se trouve l'instanciation de la frame qui a été réalisée automatiquement par Netbeans. Je vois les instanciations de tous les autres objets graphiques sauf celui-là!

    Du coup, pas question de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int w = f.getSize().width;
    int h = f.getSize().height;
    puisqu'il me sort: non-static method getSize() cannot be referenced from a static contex

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    En général on essaie d'éviter l'utilisation d'un layout null comme la peste.

    Utilises plutôt du GroupLayout ou du GridBagLayout (les deux se manipulent sans problème dans le designer de netbeans), et tu n'auras absolument plus besoin de t’inquiéter de la taille de la fenêtre...

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Puisque tu utilise NetBeans, j'imagine que tu utilises le GUI Builder matisse. Dans ce cas tu peux simplement mettre un JPanel là où tu veux afficher ton graph en utilisant la palette graphique (tu le places/dimensionnes comme tu veux). Tu peux par exemple nommer ce JPanel "graphPanel", ensuite tu fais un click droit sur le panel et tu lui fixes un layout BorderLayout.
    Et pour afficher ton graph :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ChartPanel chartPanel = new ChartPanel(chart, false);
    graphPanel.add(chartPanel, BorderLayout.CENTER);

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par le y@m's Voir le message
    Puisque tu utilise NetBeans, j'imagine que tu utilises le GUI Builder matisse. Dans ce cas tu peux simplement mettre un JPanel là où tu veux afficher ton graph en utilisant la palette graphique (tu le places/dimensionnes comme tu veux). Tu peux par exemple nommer ce JPanel "graphPanel", ensuite tu fais un click droit sur le panel et tu lui fixes un layout BorderLayout.
    Et pour afficher ton graph :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ChartPanel chartPanel = new ChartPanel(chart, false);
    graphPanel.add(chartPanel, BorderLayout.CENTER);
    C'est justement ce que j'avais essayé de faire. Je ne connaissais pas le clic droit pour fixer un layout, mais ça ne fonctionne pas...
    J'ai ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ChartPanel chartPanel = new ChartPanel(chart,false);
    jPanel1.add(chartPanel, BorderLayout.CENTER);
    jPanel1.setVisible(true);
    (Perso mon panel s'appelle automatiquement jPanel1, c'est Netbeans qui le nomme.)
    Je ne vois pas de différence avec ton code et pourtant rien ne s'affiche...

    J'avais également essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ChartPanel chartPanel = new ChartPanel(chart,false);
    JPanel Panel1 = new JPanel(new BorderLayout());
    Panel1.add(chartPanel, BorderLayout.CENTER);
    Panel1.setVisible(true);
    En supprimant le panel en mode design.
    Dis moi si je me trompe, mais pour moi dans ce cas, c'est moi qui réalise l'instanciation du panel alors que dans le premier cas, c'est l'EDI qui le fait tout seul.

    Bref, pas moyen de faire apparaitre ce graphique

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par sinok Voir le message
    En général on essaie d'éviter l'utilisation d'un layout null comme la peste.

    Utilises plutôt du GroupLayout ou du GridBagLayout (les deux se manipulent sans problème dans le designer de netbeans), et tu n'auras absolument plus besoin de t’inquiéter de la taille de la fenêtre...
    Qu'appelles-tu un layout null et comment as-tu vu que j'en utilise un ?

    J'ai cherché un peu partout le GroupLayout ou le GridBagLayout mais je ne les ai pas trouvé.

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Citation Envoyé par bob1973 Voir le message
    J'avais également essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ChartPanel chartPanel = new ChartPanel(chart,false);
    JPanel Panel1 = new JPanel(new BorderLayout());
    Panel1.add(chartPanel, BorderLayout.CENTER);
    Panel1.setVisible(true);
    En supprimant le panel en mode design.
    Dis moi si je me trompe, mais pour moi dans ce cas, c'est moi qui réalise l'instanciation du panel alors que dans le premier cas, c'est l'EDI qui le fait tout seul.
    Oui c'est ça mais bon après il faut ajouter le panel à la fenêtre à la main, perso je préfère gérer au maximum le placement des composants via matisse, c'est quand même plus simple et efficace.


    Citation Envoyé par bob1973 Voir le message
    C'est justement ce que j'avais essayé de faire. Je ne connaissais pas le clic droit pour fixer un layout, mais ça ne fonctionne pas...
    J'ai ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ChartPanel chartPanel = new ChartPanel(chart,false);
    jPanel1.add(chartPanel, BorderLayout.CENTER);
    jPanel1.setVisible(true);
    (Perso mon panel s'appelle automatiquement jPanel1, c'est Netbeans qui le nomme.)
    Je ne vois pas de différence avec ton code et pourtant rien ne s'affiche...
    Le nom donné par NetBeans est modifiable mais bon comme tu dis c'est pareil donc ce n'est pas l'important. Le setVisible(true) est inutile, par défaut le panel est visible.
    Est ce que ce code s'exécute alors que la fenêtre est déjà affichée ? Si oui essaye de forcer le rafraichissement du JPanel. Aussi, si ce code peut s'exécuter plusieurs fois il faut supprimer le chartPanel précédent s'il y en a un.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ChartPanel chartPanel = new ChartPanel(chart,false);
    jPanel1.removeAll();
    jPanel1.add(chartPanel, BorderLayout.CENTER);
    jPanel1.repaint();

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par le y@m's Voir le message
    Est ce que ce code s'exécute alors que la fenêtre est déjà affichée ? Si oui essaye de forcer le rafraichissement du JPanel. Aussi, si ce code peut s'exécuter plusieurs fois il faut supprimer le chartPanel précédent s'il y en a un.
    Effectivement, je suis dans ce cas de figure. Alors j'ai essayé ton code et je me rapproche de la solution:

    1. Au départ, mon IHM est vide et je dois cliquer sur un bouton pour afficher le graphique.
    2. Lorsque je clique, rien ne se passe.
    3. Si je réduis la fenetre puis l'agrandis à nouveau, mon graphe est bien affiché dans le panel.
    4. Si j'agrandis la frame, le graphique est bien automatiquement redessiné.
    5. Si je clique à nouveau sur le bouton (pour changer la plage de valeurs à afficher), je n'ai à nouveau pas de graphe et il faut réduire/agrandir pour l'avoir.

  10. #10
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Après avoir ajouté ton ChartPanel à ton JPanel, fais un appel à la méthode revalidate du JPanel.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    OK, ça marche nickel!

    Merci beaucoup pour le temps passé à me dépanner.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/06/2014, 12h41
  2. Problème d'affichage de boutons dans une Frame ayant une image en background
    Par felxio dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 13/08/2012, 14h35
  3. Réponses: 28
    Dernier message: 24/06/2009, 14h06
  4. [JFreeChart] affichage d'un graphe dans une page jsp
    Par mokhtarmaroc dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 08/09/2007, 23h13
  5. Réponses: 1
    Dernier message: 24/05/2007, 16h12

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