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

Composants Java Discussion :

[JScrollPane] Recalcitrant


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 17
    Points
    17
    Par défaut [JScrollPane] Recalcitrant
    Bonjour,
    J'ai 2 JScrollPane dans une JFrame.
    L'un contient un JPanel qui contient un JTree, l'autre un JPanel qui contient une ImageIcon.
    Etrangement, le JScrollPane qui contient le JTree fonctionne : si l'on "deplie" un noeud de l'arbre qui devient trop grand, la barre de scrolling apparait, mais le JScrollPane qui contient l'ImageIcon, lui ne bronche pas meme qd l'image est tres grande ...

    Faut-il modifier un attribut du JScrollPane ???
    Il me semble avoir reussi à afficher une image ds un JScrollPane fonctionnel mais je ne retrouve plus comment ...

    Merci d'avance !

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 28
    Points : 31
    Points
    31
    Par défaut
    bonjour,

    peut-être que ImageIcon n'implémente pas
    javax.swing
    Interface Scrollable

    alors que JTree oui ...
    à regarder non ?

    Cordialement

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 50
    Points : 48
    Points
    48
    Par défaut
    une solution peut etre au lieu d'afficher une ImageIcon d'afficher un JPanel sur lequel tu dessine ton image, et évidemment faire pour que le JPanel ait la taille de l'image

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par mabs
    une solution peut etre au lieu d'afficher une ImageIcon d'afficher un JPanel sur lequel tu dessine ton image, et évidemment faire pour que le JPanel ait la taille de l'image
    Je viens d'essayer et ca ne change rien. L'image est bien la, plus grande que le JScrollPanel et tjs non scrollable.

    [edit]J'ai transformé mon JPanel en JTextPane et j'ai fait insertIcon().
    Eh bah la il veut bien scroller mais seulement a la verticale ! Surement a cause du retour a la ligne auto (qui ne peut pas etre desactivé ds un JTextPane )
    Donc, same player shoot again !
    Je vais bien trouvé une solution propre ...
    [/edit]

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Etrange...
    Chez moi, cela semble pourtant marcher.

    Exemple :

    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
    import java.awt.*;
    import javax.swing.*;
     
    public class JPanelContenantGrandeImageIconScrollable extends JPanel {
     
        public JPanelContenantGrandeImageIconScrollable() {
     
            this.setLayout(new BorderLayout()); // à ne pas oublier
            this.add(new JScrollPane(new JLabel(new ImageIcon("C:\\...\\GrandeImage.jpg"))));
     
        }
     
        public static void main(String[] args) {
     
            // initialisation de la frame :
            JFrame maFrame = new JFrame();
            maFrame.setResizable(false);
            maFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            maFrame.setSize(300, 300);
     
            // remplissage par l'ImageIcon scrollable
            maFrame.setContentPane(new JPanelContenantGrandeImageIconScrollable());
     
            // affichage de la frame
            maFrame.setVisible(true);
     
        }
    }
    Nicolas

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 50
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Bideul
    Je viens d'essayer et ca ne change rien. L'image est bien la, plus grande que le JScrollPanel et tjs non scrollable.
    et tu sur de bien avoir mit a jour la taille de ton JPanel ? car moi j'ai aucun probleme de scrolling quand je met une image sur un panel si la taille tu panel est la bonne

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par mabs
    Citation Envoyé par Bideul
    Je viens d'essayer et ca ne change rien. L'image est bien la, plus grande que le JScrollPanel et tjs non scrollable.
    et tu sur de bien avoir mit a jour la taille de ton JPanel ? car moi j'ai aucun probleme de scrolling quand je met une image sur un panel si la taille tu panel est la bonne
    Effectivement, je ne l'avais pas fait explicitement ! Desolé, je pensais que le JPanel prendrait la taille du contenu et en fait non ...

    Par contre maintenant mon souci c'est que les scrollbarres n'apparaissent que si je redimensionne la fenetre (au chargement de l'image, les scrollbarres sont absentes).

    Tu n'auais pas rencontrer ce pb par hazard ??

    Encore une fois, merci d'avance !

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Le code proposé ci-dessus (qui ne nécessite pas de fixer explicitement la taille du JPanel) ne fonctionne pas ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Nicolas_75
    Le code proposé ci-dessus (qui ne nécessite pas de fixer explicitement la taille du JPanel) ne fonctionne pas ?
    Bah non.
    J'ai supprimer le JScrollPane qui contenait mon JPanel.
    J'ai creer un JScrollPane ds mon JPanel.
    et j'ai fait comme indiqué ...

    Ce qu'il faudrait que je sache c'est qu'elle methode est appelée lors du redimensionnnement du JPanel pour pouvoir l'appeler moi meme ... (et donc faire apparaitre les barres)

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Vérifie bien le layout du JPanel contenant le JScrollPane.

    Peux-tu poster ton code ?

    Nicolas

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    J'ai le meme resultat qu'en precisant la taille du JPanel ...
    Les scrollbar n'apparaissent qu'apres redimensionnement !

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    1. Juste pour ma compréhension : quand tu exécutes sur ta machine (en-dehors de ton application) le code que je t'ai proposé, les barres de défilement ne s'affichent pas ?

    2. Si tu postes ton code, cela sera plus facile d'y trouver l'erreur...

    Nicolas

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Reponse 1. : les barres s'affichent immediatement ...
    Reponse 2. : version allegee du code :
    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
     
    public class Interface extends JFrame {
    	private Visualisation visualisation = null;
    	private JScrollPane jScrollVisualisation = null;
     
    	public Interface() {
    		visualisation = new Visualisation();
    		jScrollVisualisation = new JScrollPane(visualisation);
    	}
    }
     
    public class Visualisation extends JPanel {
    	private DonneeImage image = null;
     
    	public Visualisation() {
    	}
     
    	public void chargerImage(String path, double ech) {
    		image = new DonneeImage(path);
    		this.setPreferredSize(new Dimension(image.getIconWidth(),image.getIconHeight()));
    	}
    }

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Peux-tu en donner un peu plus, pour que je puisse tester chez moi ?
    Si possible, qqc d'exécutable (compilable, avec un main).
    Sinon, au minimum la classe DonneeImage + la méthode qui insère graphiquement "image" dans le JPanel au sein de Visualisation.

    Nicolas

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Voici la methode de dessin dans la classe "Visualisation" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		image.draw(g, rapportZoom);
    }
    et la classe DonneeImage :
    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
     
    public class DonneeImage extends ImageIcon{
    	private String chemin = null;
     
    	public DonneeImage(String path) {
    		super(path);
    		chemin = path;
    	}
     
    	public String getChemin() {
    		return chemin;
    	}
     
    	public void draw(Graphics g, double zoom) {
    		Graphics2D g2 = (Graphics2D) g;
    		g2.scale(zoom, zoom);
    		g2.drawImage(this.getImage(), new AffineTransform(), this.getImageObserver());
    	}
    }
    [/code]

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Désolé de revenir toujours sur le même sujet, mais il me semble que le souci provient du layout du JPanel qui doit englober le JScrollPane.

    J'ai un peu retravaillé ton code, et cela marche chez moi (apparition immédiate des barres de défilement).

    Nicolas

    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
    import java.awt.*;
    import java.awt.geom.AffineTransform;
    import javax.swing.*;
     
    class Interface extends JFrame {
        private Visualisation visualisation = null;
        private JScrollPane jScrollVisualisation = null;
     
        public Interface() {
            this.setSize(400,400); // AJOUT
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            visualisation = new Visualisation();
            visualisation.chargerImage("C:\\...\\GrandeImage.jpg", 1); // AJOUT
            jScrollVisualisation = new JScrollPane(visualisation);
            JPanel panelEnglobant = new JPanel(); // AJOUT
            panelEnglobant.setLayout(new BorderLayout()); // AJOUT ***
            panelEnglobant.add(jScrollVisualisation); // AJOUT
            this.setContentPane(panelEnglobant); // AJOUT
        }
    }
     
    class Visualisation extends JPanel {
        private DonneeImage image = null;
     
        public Visualisation() {  
        }
     
        public void chargerImage(String path, double ech) {
            image = new DonneeImage(path);
            this.setPreferredSize(new Dimension(image.getIconWidth(),image.getIconHeight())); 
        }
     
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            image.draw(g, 1); // MODIF' suppression de rapportZoom
        }
    }
     
    class DonneeImage extends ImageIcon{
        private String chemin = null;
     
        public DonneeImage(String path) {
            super(path);
            chemin = path;
        }
     
        public String getChemin() {
            return chemin;
        }
     
        public void draw(Graphics g, double zoom) {
            Graphics2D g2 = (Graphics2D) g;
            g2.scale(zoom, zoom);
            g2.drawImage(this.getImage(), new AffineTransform(), this.getImageObserver());
        }
    }
     
    public class Example {
     
        public static void main(String[] args) {
            Interface i = new Interface();
            i.setVisible(true);
        }
     
    }

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    En fait, dans ma JFrame j'ai une imbrication de SplitPane ...
    C'est donc un SplitPane qui contient mon JScrollPane.
    Et pas possible de definir un Layout sur un SpliPane ... normal tu me diras.

    Le probleme est que je ne charge pas l'image a la creation de la fenetre.
    Je pense que, lors de la creation et du redimensionnement, une methode specifique est appelée à mon insu qui active les scrollbar.

    Je suis tetu ... merci pour tes reponses !

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    OK. As-tu essayé de mettre entre ton SplitPane et ton JScrollPane un JPanel au bon layout ?

    Nicolas

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    Je viens juste de la faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    JPanel essai = new JPanel();
    essai.setLayout(new BorderLayout());
    essai.add(jScrollVisualisation);
    splitPane2.setLeftComponent(essai);//jScrollVisualisation);
    Et j'ai tjs le meme pb !

    Je pense donc avoir raison ... desole

    Par contre pour en etre sur tu peux tester le chargement differe de l'image ...

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    J'allais commencer à programmer un SplitPane dans mon IDE, et je me suis dit... que notre échange pouvait encore durer longtemps , moi reconstruisant progressivement ton programme, et toi me disant que ma réponse est décalée.

    Je te suggère de poster ton code, sous forme compilable avec un main, en ayant enlevé tout ce qui ne sert pas à montrer ton problème. Par exemple, juste avec 2 images qui alternent autour d'un Thread.sleep(1000).

    Nous pourrons alors le disséquer dans nos IDE préférés, et t'aider efficacement.

    C'est juste une suggestion.

    Nicolas

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [JFrame][JScrollPane] rafraichissement
    Par iuz dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 14/05/2004, 11h08
  2. [JSCROLLPANE][JTABLE] Probleme de raf...
    Par thibaud dans le forum Composants
    Réponses: 5
    Dernier message: 04/05/2004, 11h26
  3. [JScrollPane]Comment savoir quand une scrollbar apparait ?
    Par FrigoAcide dans le forum Composants
    Réponses: 4
    Dernier message: 29/04/2004, 10h10
  4. [JScrollPane] élargir la taille
    Par nyny_p dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 03/05/2003, 10h54
  5. [VB6] enabled récalcitrant
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 04/12/2002, 10h09

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