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 :

Problème avec JScrollPane et Panel paint


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Par défaut Problème avec JScrollPane et Panel paint
    Bonjour à tous,
    Malgré plusieurs soirées de recherche intensive, de tests de code trouvé à droite à gauche et de bonnes prises de tête, je n'ai pas trouvé la solution à mon problème. Si une âme charitable pouvait me venir en aide, je lui en serait reconnaissante

    Je vous fais un bref topo:
    J'ai une classe Fenêtre qui est un JPanel. Dans cette classe, j'ai un menu gauche, et a droite, je dois afficher 1 diagramme en fonction des choix faits dans le menu. Jusque là pas de souci, tout se passe correctement.
    Mon diagramme (classe Diagramme) est aussi un JPanel, sur lequel j'appelle la fonction paint(Graphics g) et qui me dessine un diagramme. Le diagramme s'étend sur environ 1300 pixels horizontalement.
    Et pour intégrer le diagramme à ma fenêtre qui elle ne fait que 800x600, j'utilise donc un JScrollPane. Ce qui paraît ma foi logique.
    Le souci, est que mon JScrollPane ne prend pas le fait que le diagramme déborde du cadre (et qu'il devrait par conséquence me faire une barre horizontale).
    Et là ca devient gênant, car mon diagramme est coupé en plein milieu. Je n'arrive pas a faire "comprendre" à mon JScrollPane la taille de mon panel Diagramme et donc de mettre en place ma barre.

    Mon code est le suivant:
    Fenêtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dp = new Diagramme(projet);
    dp.setSize(1300,1000);
    JScrollPane pane = new JScrollPane();
    pane.add(dp);
    pane.setPreferredSize(dp.getSize());
    pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    this.add(pane,"Center");
    Merci de me donner un petit coup de main.

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Bonjour,

    Je suis loin d'être expert, mais de tête j'avais cru voir un problème similaire quelques parts. Une des solutions proposée était de passer le panel directement dans le constructeur du jscrollpane.
    As-tu essayé cela ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dp = new Diagramme(projet);
    dp.setSize(1300,1000);
    JScrollPane pane = new JScrollPane(dp);
    pane.setPreferredSize(dp.getSize());
    pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    this.add(pane,"Center");

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par défaut
    Bonjour,

    Pour moi ca pourrait peut être venir du SetSize et SetPreferredSize.

    Essaye sans donner les taille pour voir si ca change quelque chose.

    Cdlt

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Le JScrollPane se sert de la prefferedSize du composant pour déterminer s'il doit permettre le scroll ou pas.
    Il te faut donc fixer la prefferedSize de ta classe Diagramme

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Par défaut
    Hé bien merci à tous. Grâce à votre aide le scrollpane fonctionne bien. Par contre, je vais mettre en place un repaint a chaque fois que la barre change de position.
    Je posterais ensuite le code ici... On sait jamais ca peut toujours servir.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Par défaut
    Voila c'est fini.
    Je vous mets le code (pas forcément optimisé encore mais du moins fonctionnel )

    Instanciation du JScrollPane
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dp = new Diagramme(projet);
    dp.setPreferredSize(new Dimension(1200,1300));
    JScrollPane pane = new JScrollPane(dp);
    pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
    pane.getHorizontalScrollBar().addAdjustmentListener(this);
    this.add(pane,"Center");
    Mise en place du listener pour rafraichir le paint
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void adjustmentValueChanged(AdjustmentEvent e) {
    	dp.repaint();
    	dp.setVisible(false);
    	dp.setVisible(true);
    }

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

Discussions similaires

  1. Problème avec JScrollPane
    Par doons dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 23/11/2007, 11h09
  2. Problème avec JScrollPane
    Par zolotaya dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 17/07/2007, 20h06
  3. Problème avec jscrollpane
    Par mmb04 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 11/05/2007, 13h51
  4. [JscrollPane]Problèmes avec layout du panel intérieur
    Par Baptiste Wicht dans le forum AWT/Swing
    Réponses: 14
    Dernier message: 19/03/2006, 13h08
  5. Problème avec JScrollPane et label
    Par gl0be dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 26/11/2004, 17h08

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