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

AWT/Swing Java Discussion :

Superposition JPanel dans JTabbedPane


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Par défaut Superposition JPanel dans JTabbedPane
    Salut a tous,
    Je suis entrain de developper un outils de traitement du signal en java.
    Pour cela, j'ai eu a creer un JTabbedPane contenant les panels de chaque voie étudiée(Graphes du signal,FFT etc...)
    Le probleme que je rencontre est que tous les panels de graphes se superpositionnent les uns sur les autres et je n'arrive pas éviter cela...
    Quelqu'un pourrait m'aider?
    Merci
    Voici un bout de code :

    * Le code de declaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    panneauOnglet = new JTabbedPane();
                    panneauOnglet.setBounds(new Rectangle(0,hPanelTitre,lPanel,getHeight()-hPanelTitre));
     
                    /* On ajoute un listener pour le changement de fenetres par onglets */
                    panneauOnglet.addChangeListener(new ChangeListener()
                    {
                        public void stateChanged(ChangeEvent changeEvent) 
                        {
                            JTabbedPane sourceTabbedPane = (JTabbedPane) changeEvent.getSource();
                            panneauOnglet.revalidate();
                            repaint();
                        }
                    });
    * Le code d'ajout d'onglets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    this.panneauOnglet.addTab(this.donnees.getVoies(j).getNomVoie(),null,this.onglets[j],"Visualisation de la voie "+this.donnees.getVoies(j).getNomVoie());
            this.panneauOnglet.revalidate();
            if(isTabbed)
            {
                this.panelGeneral.add(panneauOnglet);
            }
    * Et enfin la mise a jour des graphes :
    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
     
    if(gr != null)
            {
                g = gr;
                x = this.lEspace;
                if(!isTabbed)
                    y = i*this.hVoie + (i + 1)*this.hEspace + this.hPanelTitre;
                else
                    y = this.hEspace ;
            }
            else
            {
                if(!isTabbed)
                {
                    g = this.panelGraphVoies[j].getGraphics();
                    x = 0 ;
                    y = 0 ;
                }
                else
                {
                    g = this.onglets[j].getGraphics();
                    x = this.lEspace;
                    y = this.hEspace;
                }
            }
     
    .....
     
    if(isTabbed)
            {
                onglets[j].setVisible(false);
                this.panneauOnglet.setComponentAt(j,onglets[j]);
                this.panneauOnglet.revalidate();
            }
    Si vous avez une idée........MERCIIIIIII

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Par défaut
    c'est normal qu'ils se superpose :p

    si tu disait plutot ce que tu aimerai faire avec on pourrait + t'aider

  3. #3
    Membre éclairé Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Par défaut
    beinh en fait, dans mon logiciel, je voudrai créer 2 options d'affichages, une en mode onglet et l'autre en mode liste.
    Cette dernière est opérationnelle mais par contre, pour la seconde, je souhaiterai pouvoir afficher le graph de chaque voie sur des onglets differents.
    Ci joint une copie ecran du résultat obtenu a ce jour :

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Par défaut
    d'accord c'est plus clair maintenant

    ce que je te propose c'est de definir tes onglet comme JPanel ok..

    ensuite tu place tes onglet de la maniere dont tu veux dans ta frame

    tu rajoute un auditeur d'action (tes onglet peuvent etres des bouton trés minces sa ressemble beaucoup et c'est plus simple a traiter)

    des que tu clique sur un onglet laction est envoyer a ActionPerformed (voir faQ :evenements et action)

    et tu donne donc l'instruction d'afficher le graphe que tu veux dans longlet

    autre methode qui selon moi est plus efficace

    tu defini plusieur JPanel avec dans chacun d'un en titre le nom de l'onglet et le graphe correspondant
    toujour avec des bouton tu rajoute une action que quand tu clique l'attribut de setVisible de ton panel devient true
    a ce moment ton panel sera visible tandis que tout les autre seront effectifs mais non visible

  5. #5
    Membre éclairé Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Par défaut
    merci beaucoup de ton aide.
    Cependant, tu ne penses pas que l'on puisse utiliser le JTabbedPane de java?
    Son implémentation a l'air pourtant pas trop compliquee...
    sinon tampis et je vais faire comme tu me l'a dit.
    Merci encore et a plus

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Par défaut
    tu peux biensur faire avec JTabblePane si tu veux mais la flexibilité est plutot moindre.. si biensur tu veux faire des chose restreintes tu peux l'utiliser mais si plus tard dans ton programme tu voudrait travailler sur tes sous frame ou des chose du genre ce serait plus intelligent de separer ton travail

    neamnois c'est toi qui doit choisir

    une experience personnelle m'a fait recommencer tout mon projet a cause d'un mauvais choix

    donc si tu pense que mon idee est un mauvais choix continue avec le JTabllePanel je peux te donenr toute la doc que tu desire

    mais si tu est a nouveau bloqué ce post sera la pour t'aider

  7. #7
    Membre éclairé Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Par défaut
    je vais alors opter pour la methodes avec des boutons...
    Merci pôur ton aide et a bientot!

  8. #8
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    La méthode avec des boutons risque de ne pas résoudre ton problème. Comment dessines-tu les graphes ? J'ai vu que tu appelais tabbedPane.getGraphics, ce qui est source de beaucoup d'erreurs, et qui te posera toujours problème, même avec des fenêtres.

    En général, pour chaque graphique on crée un JPanel, dont on surcharge la méthode paintComponent pour dessiner UN SEUL GRAPHE (il y a aussi l'API JGraph ou JChart que je ne connais pas). Ensuite, on ajoute ces JPanels dans un JTabbedPane, dans un JPanel avec un GridLayout, dans une VerticalBox, dans un Composant de Docking. Ceci devrait marcher :
    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
    public class VeryBasicGraph extends JPanel {
      int[] data;
     
      public VeryBasicGraph(int[] data) {
        this.data = data;
      }
     
      public void paintComponent(Graphics g) {
        g.setColor(getForeground());
     
        int unitWidth = (int) (1.0 * getWidth() / data.length);
     
        for(int i = 0; i < data.length; i++) {
          g.fillRect(i * unitWidth, 0, unitWidth, data[i]);
        }
      }
    }
     
    ...
    JPanel graph1 = new VeryBasicGraph(new int[]{50, 100, 150, 200});
    JPanel graph2 = new VeryBasicGraph(new int[]{150, 50, 0, 100});
    ...
    // Dans un JTabbedPane
    JTabbedPane tabPane = new JTabbedPane();
    tabPane.addTab("up", graph1);
    tabPane.addTab("down and up", graph2);
    ...
    // Dans un JPanel, verticalement
    JPanel panel = new JPanel(new GridLayout(0, 1));
    panel.add(graph1);
    panel.add(graph2);
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  9. #9
    Membre éclairé Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Par défaut
    en fait je dessine les graphes dans un tableau de JPanel que j'ajoute ensuite dans le JTabbedPane.
    Faut-il faire autrement?

  10. #10
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Le plus flexible, c'est : 1 JPanel = 1 graphe. Ainsi tu peux placer et déplacer les graphes comme tu veux. Tu nous as donné trop peu de code pour voir ce qui se passe, on ne sait pas de quel composant tu surcharges la méthode paintComponent.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

Discussions similaires

  1. Jpanel non visible dans JTabbedPane
    Par clem00738 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 05/06/2012, 15h56
  2. [Java] JScrollPane dans JTabbedPane + JPanel
    Par SoGeek dans le forum Composants
    Réponses: 3
    Dernier message: 21/02/2011, 16h51
  3. Problème d'ajout de JPanel dans un Onglet (JTabbedPane)
    Par SoGeek dans le forum Composants
    Réponses: 1
    Dernier message: 04/09/2010, 16h41
  4. Récupérer JPanel dans un JScrollPane dans un JTabbedPane
    Par orochimaru13 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 16/05/2008, 12h02

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