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 :

Graphics et JScrollPane


Sujet :

AWT/Swing Java

  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 907
    Par défaut Graphics et JScrollPane
    Bonjour

    La question a été posée mais malgré ma recherche, je n'ai pas encore trouvé de solution.
    dans un JSplitPane, j'ai un premier panneau affichant un dessin et dans le 2ème, un tableau JTable. Pas de souci pour le deuxième panneau. Voici la méthode qui construit le premier panneau (celui avec le dessin) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private JScrollPane getJScrollPaneDessin(){
            if (jScrollPaneDessin == null){
            	jScrollPaneDessin = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            	jScrollPaneDessin.setViewportView(getJPanelDessin());  
            }
            return jScrollPaneDessin;
        }
     
        public JPanel getJPanelDessin(){
            if(jPanelDessin == null)
                jPanelDessin = new DessinView();
            return jPanelDessin;
        }
    Et voici un extrait de DessinView où je dessine :
    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
     
    DessinView(){
            setBackground(Color.WHITE);
        	defaultDimJPCR = new Dimension(800,600);  
            defaultDimWindow = new Dimension(740,540);
            setLayout(null);
            primersPairEns = ProjectWindow.activateProject.getResults();
            pairsSelectedToPrint = new int[primersPairEns.getNumberPairs()];
            repaint();
        }
     
    public void paintComponent(Graphics g){
            super.paintComponent(g);
            graph = (Graphics2D)g;
    /*Calcul super savant pour dessiner*/
    }
    Mon problème est le suivant : ma barre de navigation verticale s'affiche quand il faut et comme il faut. Mais il n'en est rien pour la barre de navigation horizontale.
    Comment se fait-ce ?

    Merci d'avance de vos réponses.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Ton JPanel est il plus large que le scrollpane ? Je crois que les JScrollPane n'affichent les scroll bar que lorsque cela est nécessaire, donc que lorsque le contenu "dépasse".
    Il me semble que si tu fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tonScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS );
    ta barre de navigation horizontal devrait apparaitre (non testé).
    Bonne chance.

  3. #3
    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
    Je dirais même que tu crées des dimensions, mais tu ne les utilises pas ??

    Il faut que le JPanel ait une taille préférée (setPreferredSize), sinon il prend la taille du JScrollPane (donc pas de scrollBars dans ce cas).
    "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.

  4. #4
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 907
    Par défaut
    Bonjour

    Merci de vos réponses et désolé du retard.
    Ben, c'est pas fameux !
    Voici les modifications que j'ai apporté :
    Dans une classe ResultView :
    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
     
    public ResultView(){    
        	this.setLayout(new java.awt.BorderLayout());
            jSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, getJScrollPaneDessin(), getJScrollTable());
        	this.add(jSplitPane, BorderLayout.CENTER);
        	setVisible(true);
        } 
     
    private JScrollPane getJScrollPaneDessin(){
            if (jScrollPaneDessin == null){
            	jScrollPaneDessin = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            	jScrollPaneDessin.setPreferredSize(new Dimension(50, 100));
            	jScrollPaneDessin.setViewportView(getJPanelDessin());  
            }
            return jScrollPaneDessin;
        }
     
        public void adjustmentValueChanged(AdjustmentEvent e){}  
     
        public JPanel getJPanelDessin(){
            if(jPanelDessin == null){
                jPanelDessin = new DessinView();
                jPanelDessin.setPreferredSize(new Dimension(100,100));
            }
            return jPanelDessin;
        }
    Et voici la classe DessinView :
    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
     
    DessinView(){
            setBackground(Color.WHITE);
        	defaultDimJPCR = new Dimension(800,600);  
            defaultDimWindow = new Dimension(740,540);
            setLayout(null);
            this.setPreferredSize(new Dimension(100, 100));
        	primersPairEns = ProjectWindow.activateProject.getResults();
            pairsSelectedToPrint = new int[primersPairEns.getNumberPairs()];
            repaint();
            System.out.println(""+this.getWidth()+" * "+this.getHeight());
        }
     
    public void paintComponent(Graphics g){
            super.paintComponent(g);
            graph = (Graphics2D)g;
    /*Super bô dessin*/
    }
    Bon, j'ai toujours pas ma barre de défilement horizontale. Autre constatation, je veux obtenir la taille de mon JPanel de dessin et j'obtiens 0 * 0 .

    Merci d'avance de vos réponses.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  5. #5
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    La taille de ta fenêtre est (0; 0) tant que tu ne l'as pas rendue visible...

    [EDIT]
    C'est quoi ton prblème exactement avec ton JScrollPane?
    Tu ne veux pas que la barre horizontale s'affiche? Tu veux que la barre horizontale s'affiche? Elle ne s'affiche pas correctement?...

    Si elle ne s'affiche pas, essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    jScrollPaneDessin.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS );

  6. #6
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 907
    Par défaut
    Hello

    J'ai donc ajouté cela dans ma méthode pour afficher mon panel de dessin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private JScrollPane getJScrollPaneDessin(){
            if (jScrollPaneDessin == null){
            	jScrollPaneDessin = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            	jScrollPaneDessin.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            	jScrollPaneDessin.setPreferredSize(new Dimension(50, 100));
            	jScrollPaneDessin.setViewportView(getJPanelDessin());  
            }
            return jScrollPaneDessin;
        }
    Ok, j'ai ma barre de défilement. Mais mon dessin est large et malgré cela, je n'ai toujours pas de curseur pour me déplacer horizontalement

    Merci encore de votre aide.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  7. #7
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Tu peux remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            	jScrollPaneDessin = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            	jScrollPaneDessin.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    jScrollPaneDessin = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    Et enlève cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    jScrollPaneDessin.setViewportView(getJPanelDessin());

  8. #8
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 907
    Par défaut
    Hello

    Ok, j'ai modifié selon tes recommandations.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private JScrollPane getJScrollPaneDessin(){
            if (jScrollPaneDessin == null){
            	jScrollPaneDessin = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            	jScrollPaneDessin.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            	jScrollPaneDessin.setPreferredSize(new Dimension(50, 100));
            }
            return jScrollPaneDessin;
        }
    D'accord, j'ai mes barres de défilement. Mais, j'ai plus mon dessin. C'est pourquoi j'avais mis cette ligne : jScrollPaneDessin.setViewportView(getJPanelDessin());

    Aïe ! Si ça continue je vais devoir faire appel à Piccolo (une chouette librairie de dessin).

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  9. #9
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Oups, pardon.
    Essaie comme ça alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private JScrollPane getJScrollPaneDessin(){
            if (jScrollPaneDessin == null){
            	jScrollPaneDessin = new JScrollPane(getJPanelDessin());  
            	jScrollPaneDessin.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            	jScrollPaneDessin.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            	jScrollPaneDessin.setPreferredSize(new Dimension(50, 100));
            }
            return jScrollPaneDessin;
        }
    On va bien finir par y arriver

  10. #10
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 907
    Par défaut
    Hello Seiryujay

    Malgré ta construction, le résultat est toujours le même.
    Afin de vous montrer à tous le résultat, voici un screenshot
    Vous voyez que dans le panneau supérieur, mon dessin est large et malgré cela, je n'ai aucun moyen de défilement horizontal.

    Merci encore de votre aide.

    @++
    Images attachées Images attachées  
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  11. #11
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Y'a un truc qui me surprend, c'est que ton scrollpane ne fait pas 50 de large et 100 de haut.
    Et j'ai l'impression que ton panel fait plus que 100 de largeur aussi...
    Du coup, faudrait que tu affiche les tailles de ton scrollpane et de ton panel une fois que tu les a rendus visibles.

    On se rendra peut-être compte qu'il font la même largeur

  12. #12
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    j'ai pas lu tout ton code ....

    mais coment as-tu mis le panel dans le JScrollPane ?
    add ou setViewportView ?

    si c'est add, remplace le par
    setViewportView(java.awt.Component) => donc JPanel

  13. #13
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 907
    Par défaut
    Citation Envoyé par seiryujay
    Y'a un truc qui me surprend, c'est que ton scrollpane ne fait pas 50 de large et 100 de haut.
    Et j'ai l'impression que ton panel fait plus que 100 de largeur aussi...
    Du coup, faudrait que tu affiche les tailles de ton scrollpane et de ton panel une fois que tu les a rendus visibles.

    On se rendra peut-être compte qu'il font la même largeur
    Je vais être franc, je reprend un code qui était écrit par quelqu'un d'autre que moi (un stagiaire). Total, on me refile le bébé.
    Cependant, même en supprimant ces appels de Dimension, le résultat est toujours le même.
    Je crois que je suis parti pour une semaine de

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  14. #14
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Ne supprime pas les appels, mais affiche les dimensions dans ta console une fois que tu as rendu ta frame visible, histoire qu'on compare leur dimension et qu'on voit si c'est "normal" ou pas que tes scrollbars ne s'affichent pas.

  15. #15
    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
    Ou alors ajoute une LineBorder bien kitsch (vert par exemple) au JPanel à l'intérieur. Ca permettra de voir sa dimension réelle.
    "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.

  16. #16
    Membre éclairé Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Par défaut
    j'ai pas tout lu mais ma 1er idée serais de faire ceci:



    Mettre le layout FlowLayout à ton JScrollPane
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monScrollPane.setLayout(new FlowLayout());
    et de mettre une dimension à ton composant que tu ajoutes dans ton JScrollPane
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monDessinView.setPreferredSize(new Dimension(100, 100));

  17. #17
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 907
    Par défaut
    Chers vous tous

    N'y arrivant décidément pas, j'ai décidé de reprendre le problème mais en faisant appel à la librairie Piccolo qui dispose des outils adéquats pour mon problème.
    Néanmoins, j'ai apprécié vos réponses et je garde le thread dans un coin pour le cas échéant.

    Merci encore de votre aide et à charge de revanche.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

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

Discussions similaires

  1. Bug: JScrollPane et Graphics
    Par Elbakin dans le forum Composants
    Réponses: 2
    Dernier message: 03/02/2010, 13h22
  2. ajout d'un Graphics dans un jScrollPane dynamiquement
    Par rocel dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 15/05/2008, 17h47
  3. Problème Graphics dans JScrollPane
    Par boudreau_benjamin dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 15/10/2006, 21h55
  4. JScrollPane dans une JInternalFrame contenant un graphic
    Par Sirkiller dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 08/06/2006, 12h13
  5. JScrollPane Graphics/ JPanel
    Par daedric dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 26/05/2006, 13h28

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