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

Interfaces Graphiques en Java Discussion :

Enigme d'affichage avec NetBeans et JFreechart


Sujet :

Interfaces Graphiques en Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 1
    Points
    1
    Par défaut Enigme d'affichage avec NetBeans et JFreechart
    Bonjour à tous,

    Je sèche depuis un certain temps sur un problème qui ne fait que se creuser au fur et à mesure que je teste des petites choses pour savoir d'où vient le problème.

    Je développe une appli sous netbeans et j'aimerais afficher un graphique fait avec jfreechart en l'ajoutant à un panel.

    Pour ça, je n'ai fait que customiser le code de création du panel (création du JPanel panelGraphique) en ajoutant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ChartPanel panelGraphe = new ChartPanel(creerJFreeChart());
    panelGraphique.add(panelGraphe, BorderLayout.CENTER);
    rien ne s'affiche, le jpanel auquel j'ajoute est affiché normalement à l'écran mais rien n'est présent dedans et après des quantités de tests pour savoir ce qui n'allait pas j'en suis venu à tenter un truc bizarre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    panelGraphe = new ChartPanel(creerJFreeChart());
    JFrame bidule = new JFrame();
    bidule.setContentPane(panelGraphe);
    bidule.pack();
    panelGraphique.add(panelGraphe, BorderLayout.CENTER);
    et là, miracle, je graphique s'affiche correctement. Je ne vois pas du tout comment ni pourquoi le fait d'ajouter le ChartPanel à une JFrame changerait quelque chose à son affichage dans un JPanel qui ne dépend absolument pas de la JFrame en question.

    Après plusieurs tests, j'ai l'impression que c'est le pack qui fait s'afficher le chartpanel.

    Merci d'avance pour votre aide, comme j'ai dû perdre un peu de clairvoyance à force de ne rien comprendre à tout ça, j'ai peut être oublié certaines informations importantes dans la description de mon problème, n'hésitez pas à me le faire remarque si c'est le cas.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 795
    Points
    4 795
    Par défaut
    ChartPanel étend la classe JPanel. JPanel ne peut pas s'afficher sans "support" (un JFrame par exemple).
    Donc le seul code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ChartPanel panelGraphe = new ChartPanel(creerJFreeChart());
    panelGraphique.add(panelGraphe, BorderLayout.CENTER);
    .. ne suffit pas à afficher quelque chose.

    Pour aller plus loin, il faudrait voir la partie de code complet suivant la déclaration

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Le projet que je développe est sous netbeans, j'ajoute donc que tous les composants sont ajoutés à une JFrame, le panel auquel j'ajoute le ChartPanel est dans la JFrame principale de mon application.

    Le mystère est que dans le premier cas (où je ne fais qu'ajouter le ChartPanel à mon JPanel), mon JPanel s'affiche normalement mais aucune trace de ChartPanel, tandis qu'en instanciant une JFrame bidon (appelée bidule dans l'exemple de code que je donne) à laquelle j'ajoute mon ChartPanel, ce même ChartPanel s'affiche correctement sur mon JPanel qui n'a rien à voir avec bidule (la JFrame).

    J'arrive donc à afficher mon graphique mais par une méthode complètement stupide de créer une JFrame inutile que je ne rend pas visible. JFrame dont apparemment la méthode pack rend mon ChartPanel affichable.

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 795
    Points
    4 795
    Par défaut
    Bon d'accord.
    Cela ressemble à un problème d'actualisation ...
    Qu'est-ce que cela donnerait en appliquant la méthode pack à la JFrame principale (après ajout du JPanel) ?
    Ou encore une autre méthode qui force l'actualisation : panelGraphe.repaint

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    J'ai essayé de refaire un pack sur la fenêtre principale, ça ne fait que mettre un bordel pas possible dans la JFrame avec les composants créés automatiquement par netbeans. Sinon, le repaint, je m'étais dit que ça ne ferait strictement rien et j'avais hélas raison.

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 795
    Points
    4 795
    Par défaut
    J'ai oublié de mentionner la méthode panelGraphe.validate() qui donne parfois des résultats

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    erf... déjà essayé aussi. Je crois que j'ai relu une dizaine de fois toutes les méthodes de la classe JPanel.

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 795
    Points
    4 795
    Par défaut
    Dans les exemples JFreechart qu'on trouve avec Google, le setSize() du composant recevant le graphique est souvent utilisé. Il force l'actualisation du JFrame.

    Je ne comprends pas non plus pourquoi un pack sème la perturbation dans le JFrame

    Sans le code complet je n'ai pas d'autre piste ...

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Le reste du code n'est que du standard interface générée par netbeans. J'ai juste ajouté (en customisation du code) la déclaration et la construction du ChartPanel.

  10. #10
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 795
    Points
    4 795
    Par défaut
    Sans le code, on part à la pêche ... (quoique, par ce beau temps, cela peut être agréable )

    En relisant le fragment posté ci-dessus, j'ai vu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    panelGraphique.add(panelGraphe, BorderLayout.CENTER);
    BorderLayout n'est pas le layout par défaut de NetBeans. Il y a peut-être un conflit à cet endroit.

    Par contre, en créant un JFrame sans passer par NB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JFrame bidule = new JFrame();
    alors, on n'a pas ce problème.
    Ceci explique peut-être que, du coup, le graphique veut bien s'afficher dans ce cas-là.

    Dans la JFrame "principale" créée avec NB, s'il n'y a pas d'autres composants (jlabel, textfield, etc...), il serait intéressant de changer le layout pour BorderLayout et refaire un essai.

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Je préfère ne pas mettre le code en entier parce que ça devient monstrueux. Je pense que le paradoxe de création de la Frame qui apparemment n'a rien à voir et qui débloque le problème devrait pouvoir suffire à pointer ce qui peut poser problème.

    Je n'avais rajouté le layout que plus tard, j'ai revérifié mais ça ne marche pas non plus en enlevant le layout.

  12. #12
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 795
    Points
    4 795
    Par défaut
    ça devient monstrueux
    Tant pis pour le monstre alors.
    Par curiosité, je vais essayer ce soir de faire la même chose dans NB.
    Si ça marche, je posterai.

  13. #13
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 795
    Points
    4 795
    Par défaut exemple
    Bon alors voilà, j'ai fait un test rapide :
    - création d'un JFrame avec NetBeans
    - réglage du layout sur BorderLayout (faire un clic-droit au milieu du JFrame)
    - création de la classe interne Charts qui étend JPanel pour être au plus près du problème exposé par devoccasionnel
    - ajout d'une instance de Charts dans le JFrame
    - mise à la bonne dimension



    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
    import java.awt.Color;
    import javax.swing.JPanel;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.PiePlot;
    import org.jfree.chart.plot.Plot;
    import org.jfree.data.general.DefaultPieDataset;
     
     
    public class NewJFrame extends javax.swing.JFrame {
     
        /** Creates new form NewJFrame */
        public NewJFrame() {
            initComponents();
            getContentPane().add(new Charts());
            setSize(700,550);
        }
     
        // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
        private void initComponents() {
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            pack();
        }// </editor-fold>                        
     
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new NewJFrame().setVisible(true);
                }
            });
        }
     
     
        private class Charts extends javax.swing.JPanel {
     
            public Charts() {
                initComponents();
                DefaultPieDataset union = new DefaultPieDataset();
                union.setValue("Pierre",30.0);
                union.setValue("Marie",20.0);
                union.setValue("Jean",7.0);
                union.setValue("Hime",13.0);
                union.setValue("Sarah",30.0);
                JFreeChart repart =
                        ChartFactory.createPieChart3D("Répartition par personne",
                        union,true, true, false);
                ChartPanel crepart = new ChartPanel(repart);
                Plot plot = repart.getPlot();
     
                this.add(crepart);
     
            }
        }
    }
    Il n'y a pas plus simple et ça fonctionne ... à condition que le JFrame n'ai PAS le layout par défaut que NetBeans lui donne.
    (celui-ci est prévu pour positionner au mieux d'autres composants)

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Et à aucun moment lors de la création de cette Frame il n'y a eu de problème d'affichage ?

    Sinon, une piste qui est apparue hier soir et qui pourrait éventuellement expliquer mon problème : dans mon projet, j'ai deux IHM différentes, une pour mettre au point l'algorithme et pour surveiller comment il se comporte et l'autre qui sera celle utilisée une fois l'application construite (interface sur laquelle j'aurai besoin de ces graphiques JFreeChart).

    J'ai donc commencé la deuxième interface et je me suis rendu compte d'un problème qui a l'air inhérent à mon projet vu que je n'ai pas le même problème si je démarre un projet totalement différent :
    voici deux vues : ce que je vois lorsque je dessine l'interface, tout est normal
    Nom : impression écran netbeans.PNG
Affichages : 684
Taille : 16,6 Ko


    puis ce que je vois à l'exécution, les boutons se contractent, les jlabels disparaissent et tout ceci de façon totalement aléatoire en se mettant en place de manière aléatoire d'une exécution à l'autre
    Nom : impression écran exécution.PNG
Affichages : 562
Taille : 10,2 Ko

    Au début, rien n'était en place lors de l'exécution et de temps en temps un composant se dessine correctement et reste correct pour toute la suite du projet, j'avais un affichage des JPanels sans la bordure, puis le bouton parcourir était atrophié comme les autres avant de se corriger sans que je touche à rien. J'ai cru que ça pouvait être dû à ma version de netbeans et j'ai installé la 6.9 ... sans résultats.

  15. #15
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 795
    Points
    4 795
    Par défaut
    Et à aucun moment lors de la création de cette Frame il n'y a eu de problème d'affichage ?
    Si, lorsque je laisse NB utiliser le layout par défaut (freedesing) là, rien ne s'affiche.
    C'est pourquoi j'insiste lourdement pour passer en BorderLayout pour le graphique.

    Si l'exemple posté est utilisé tel quel -- par exemple dans un projet indépendant -- cela fonctionne.

    Le phénomène des composants qui se contractent est nouveau. Je crois que la version de NB n'y est pour rien puisque c'est du java qui s'exécute.
    Je suppose qu'au cours de l'exécution du programme, il doit y avoir une mise à jour de l'affichage qui perturbe le layout.

    D'après ce que je vois sur les images, il semble y avoir trois jpanels :
    - fichier
    - commandes
    - données
    est-ce le cas ?

  16. #16
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Oui, j'ai trois panels, pour le problème d'affichage des composants, les images que j'ai ajoutées représentent l'interface en entier. Je me demande s'il n'y a pas une sorte de conflit entre la fenêtre principale du projet qui est une Desktop Application et la JFrame de la deuxième interface.

    Merci pour le code du ChartPanel, je n'ai pas encore finalisé l'intégration dans l'interface mais c'est la piste la plus intéressante et la plus solide que j'ai jusque là.

    ... Juste ne question : le fait de changer le layout ne risque pas de mettre par terre tout le design de l'interface ?

  17. #17
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 795
    Points
    4 795
    Par défaut
    le fait de changer le layout ne risque pas de mettre par terre tout le design de l'interface
    Oui c'est ce qui va se produire.
    On va essayer de trouver une solution sans tout casser.

    Est-ce que le panneau ChartPanel doit trouver place dans le panneau données ?

  18. #18
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Le ChartPanel ne se trouve nulle part sur l'interface dont j'ai mis les images (ce serait trop simple). Cette interface avec les trois panels est l'interface que je vais utiliser pour surveiller et mettre au point un algo très complexe, elle ne servira qu'à moi, tandis que l'interface sur laquelle le ChartPanel se trouvera est l'interface principale du projet, une interface créé par netbeans pour une Desktop Application.

    Nom : impression écran interface.PNG
Affichages : 628
Taille : 12,8 Ko

    Le graphique devra se trouver dans la panel graphiques.

  19. #19
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 795
    Points
    4 795
    Par défaut Nouveau test
    Les contraintes sont les suivantes :
    - pouvoir composer une JFrame avec NetBeans pour la facilité de placement des cadres.
    - pouvoir afficher un graphique dans l'un de ces cadres

    J'ai donc :
    - créé un JFrame en suivant à peu près le modèle envoyé dans le post précédent.
    - Changé le LayOut du panneau "graphiques". Il est en BorderLayout.
    - Placé le graphique dans le panneau "graphiques"

    (lire la suite sous l'image ...)




    Il y a deux façons de présenter le graphique :
    1) le graphique s'adapte tout seul aux dimensions du panneau (il peut donc être déformé ...)
    2) le graphique a une dimension fixe et s'affichera donc toujours de la même manière.

    J'ai fait deux boutons pour tester ces deux façons d'afficher le graphique.
    Le principe d'exécution est le suivant :
    méthode 1) [préparation du graphique] -> [placement dans le panneau "graphiques"]
    méthode 2) [préparation du graphique] -> [placement dans un panneau intermédiaire] -> [placement dans le panneau "graphiques"]

    Ce qu'il y a de pratique dans Java c'est qu'on peut empiler autant de panneaux qu'on veut

    code complet :
    (ne s'attarder sur le détail de la méthode initComponents() générée automatiquement par NB)

    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
    import java.awt.BorderLayout;
    import java.awt.Color;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.PiePlot;
    import org.jfree.chart.plot.Plot;
    import org.jfree.data.general.DefaultPieDataset;
     
     
    public class JFrameGraphique extends javax.swing.JFrame {
     
        /** Creates new form NewJFrame */
        public JFrameGraphique() {
            initComponents();
        }
     
        // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
        private void initComponents() {
            jTabbedPane1 = new javax.swing.JTabbedPane();
            jPanel1 = new javax.swing.JPanel();
            jPanel2 = new javax.swing.JPanel();
            graphiques = new javax.swing.JPanel();
            commandes = new javax.swing.JPanel();
            btnTailleVariable = new javax.swing.JButton();
            btnTailleFixe = new javax.swing.JButton();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            jTabbedPane1.addTab("Utilisateurs", jPanel1);
     
            jTabbedPane1.addTab("Entra\u00eenements", jPanel2);
     
            graphiques.setLayout(new java.awt.BorderLayout());
     
            graphiques.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Graphiques", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 0, 255)));
     
            commandes.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Commandes", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 0, 255)));
     
            btnTailleVariable.setText("Graphique taille variable");
            btnTailleVariable.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    btnTailleVariableActionPerformed(evt);
                }
            });
     
            btnTailleFixe.setText("Graphique taille fixe");
            btnTailleFixe.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    btnTailleFixeActionPerformed(evt);
                }
            });
     
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(graphiques, javax.swing.GroupLayout.DEFAULT_SIZE, 707, Short.MAX_VALUE)
                        .addComponent(commandes, javax.swing.GroupLayout.DEFAULT_SIZE, 707, Short.MAX_VALUE)
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(btnTailleVariable, javax.swing.GroupLayout.PREFERRED_SIZE, 194, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(btnTailleFixe, javax.swing.GroupLayout.PREFERRED_SIZE, 154, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addContainerGap())
            );
     
            layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btnTailleFixe, btnTailleVariable});
     
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(btnTailleFixe)
                                .addComponent(btnTailleVariable))
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(graphiques, javax.swing.GroupLayout.DEFAULT_SIZE, 527, Short.MAX_VALUE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(commandes, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 620, Short.MAX_VALUE))
                    .addContainerGap())
            );
            pack();
        }// </editor-fold>                        
     
        private void btnTailleFixeActionPerformed(java.awt.event.ActionEvent evt) {                                              
            // pour remise à zéro du panneau
            graphiques.removeAll();
     
            // panneau pour encadrer le graphique :
            JPanel cadreIntermédiaire = new JPanel();
            // placement du graphique dans le cadre intermédiaire
            cadreIntermédiaire.add(prépareGraphique());
     
            // placement du cadre intermédiaire dans le panneau "graphiques"
            // le dessin n'est plus déformé par les changements de taille du JFrame car bloqué par le cadre intermédiaire
            graphiques.add(cadreIntermédiaire);
            graphiques.validate();        
        }                                             
     
        private void btnTailleVariableActionPerformed(java.awt.event.ActionEvent evt) {                                                  
            // pour remise à zéro du panneau
            graphiques.removeAll();
     
            // ajout simple et direct au panneau "graphiques"
            // la taille du graphique va s'adapter automatiquement aux changements de taille du JFrame
            graphiques.add(prépareGraphique());
            graphiques.validate();
        }                                                 
     
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new JFrameGraphique().setVisible(true);
                }
            });
        }
     
        private ChartPanel prépareGraphique(){
            // fabrication du graphique (panneau crepart)
            DefaultPieDataset union = new DefaultPieDataset();
            union.setValue("Pierre",30.0);
            union.setValue("Marie",20.0);
            union.setValue("Jean",7.0);
            union.setValue("Hime",13.0);
            union.setValue("Sarah",30.0);
            JFreeChart repart =
                    ChartFactory.createPieChart3D("Répartition par personne",
                    union,true, true, false);
            ChartPanel crepart = new ChartPanel(repart);
            Plot plot = repart.getPlot();
     
            return crepart;
        }
     
     
        // Variables declaration - do not modify                     
        private javax.swing.JButton btnTailleFixe;
        private javax.swing.JButton btnTailleVariable;
        private javax.swing.JPanel commandes;
        private javax.swing.JPanel graphiques;
        private javax.swing.JPanel jPanel1;
        private javax.swing.JPanel jPanel2;
        private javax.swing.JTabbedPane jTabbedPane1;
        // End of variables declaration                   
     
    }
    Images attachées Images attachées  

  20. #20
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Merci infiniment, je vais étudier le code que tu proposes et qui marche pour nettoyer les quelques trolls que j'ai du laisser à droite à gauche qui font que ça plante. Tout y est : l'ajustement automatique, la réactivité à des événements et la disposition dans le panel.

    Je donne des nouvelles dès que le succès est confirmé.

Discussions similaires

  1. Probleme dans l'affichage avec netbeans
    Par king_soft dans le forum JSF
    Réponses: 0
    Dernier message: 21/05/2010, 18h45
  2. Réponses: 2
    Dernier message: 21/01/2010, 09h38
  3. probleme d'affichage avec netbeans
    Par steven10 dans le forum NetBeans
    Réponses: 4
    Dernier message: 13/06/2009, 13h54
  4. Affichage de composants (avec NetBeans)
    Par TheDoci dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 05/04/2008, 19h10
  5. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21

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