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 :

probleme de scroll bar


Sujet :

AWT/Swing Java

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut probleme de scroll bar
    salut

    j'ai une classe qui hérite de JFrame, cette classe possède un panel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private JPanel panneau;
    private DispPanel mdisp;
     
    lst= new JList(v); //v est un vecteur
    lst.setPreferredSize(new Dimension(100,100));
    JScrollPane scroll= new JScrollPane(lst);
    panneau.add(scroll, BorderLayout.WEST);
     
    mdisp = new DispPanell();
    scroll= new JScrollPane();
    scroll.getViewport().add(mdisp );
    scroll.setPreferredSize(new Dimension(0,0));
    le scroll s'affiche bien pour lst mais pas pour mdisp
    j'ai tenté d'utiliser un JSscrollPanel différent, même résultat

    voici ma classe DispPanel, cette classe affiche l'image que l'usager a sélectionné

    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
     
    public class DispPanel extends JPanel{	
    	private Image img=null;
     
            public DispPanel() {		
    	}
     
    	public void paint(Graphics g){
    		if( img != null){
    			 super.paintComponent(g); 
    			g.drawImage(img,0,0,this);
    		}
    	}
     
    	public void setFile(String fileName) {
    		try{
    			img=ImageIO.read(new File(fileName));
    			repaint();
    		}catch(Exception e){
    			System.out.println ( "probleme image");
    		} 	
    	}	
    }
    le scroll bar n'est jamais affiché pour l'image, alors qu'il est affiché pour la liste

    si quelqu'un a une solution

  2. #2
    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
    Points : 722
    Points
    722
    Par défaut
    Et si t'essayais d'ajouter ton DispPanel de la même manière que ta JList?

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    j'ai modifié avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    mdisp= new DispPanell
    mdisp= setPreferredSize(new Dimension(500,500));
    JScrollPane scroll2= new JScrollPane(mdisp= 
    panneau.add(scroll2,BorderLayout.CENTER);
    le problème est que si mon image fait 1000 par 1000, j'ai pas plus de scroll bar.... j'en ai que si je descend en dessous de 500 par 500...
    le scrollbar ne semble donc pas fait par rapport à l'image

  4. #4
    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
    Points : 722
    Points
    722
    Par défaut
    Tu ajoutes un panel dans ton scrollPane. Du coup, tes scrollbars apparaissent si ton panel est plus grand que ton scrollPane.
    Si tu ajoutes une image dans ton panel, assures-toi que ton panel fait la même taille que ton image, sinon effectivement, ton scrollpane ne tiendra pas compte de la taille de ton image...

  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
    Points : 722
    Points
    722
    Par défaut
    Et perso, je ne comprend rien au code que tu viens de poster... Il n'est pas correct syntaxiquement.

  6. #6
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par seiryujay
    Et perso, je ne comprend rien au code que tu viens de poster... Il n'est pas correct syntaxiquement.
    Tu n'es pas le seul, je vois pas trop ce qu'il veut faire exactement

    robert_trudel, tu as oublié des bouts ou bien ton code est vraiment comme ca ?

  7. #7
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Je pense qu'il a recopié vite fait son code.
    Pour les scrollbars, tu peux aussi utiliser une ImageIcon au lieu d'un JPanel pour afficher l'image. Tu n'auras plus ces problèmes de taille. Sinon, il faut appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setPreferredSize(img.getWidth(), img.getHeight());
    juste après avoir chargé l'image.

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par xavlours
    Je pense qu'il a recopié vite fait son code.
    Pour les scrollbars, tu peux aussi utiliser une ImageIcon au lieu d'un JPanel pour afficher l'image. Tu n'auras plus ces problèmes de taille. Sinon, il faut appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setPreferredSize(img.getWidth(), img.getHeight());
    juste après avoir chargé l'image.
    j'ai fait ta commande après le read...

    The method getHeight(ImageObserver) in the type Image is not applicable for the arguments ()

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    dans une classe ayant qu'un main, je fais appel à la classe ci-dessous

    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
     
    public class XXXFrame extends JFrame  {
     
    	private JPanel panneau;
    	private DispPanel mdisp;
    	private JList lst
    	private JButton btn_voir;
     
    	public void init(){
     
    		this.setSize(new java.awt.Dimension(1000,500));
    		this.setTitle("XXX");
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		panneau= new JPanel(new BorderLayout());
    		getContentPane().add(panneau);
     
    		tools= new JToolBar(JToolBar.HORIZONTAL);
    		panneau.add(tools, BorderLayout.NORTH);
    		tools.setFloatable(false);
    		initTools(tools);
     
    		lst= new JList(v); //v est un vecteur
    		lst.setPreferredSize(new Dimension(100,100));
    		JScrollPane scroll= new JScrollPane(lst);
    		panneau.add(scroll, BorderLayout.WEST);
    		mdisp= new DispPanell
    		mdisp= setPreferredSize(new Dimension(500,500));
    		JScrollPane scroll2= new JScrollPane(mdisp);
    		panneau.add(scroll2,BorderLayout.CENTER);
    	}
     
           private void initTools(JToolBar p_bar) {
    		btn_voir= new JButton("Voir");
                    p_bar.add(btn_voir);
     
                    btn_voir.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent evt) {
    				voirButtonEvent(evt);
    			}
    		});
           }
           private void viewButtonEvent(ActionEvent evt) {
    		File f= (File)lst_files.getSelectedValue();	
    		if(f != null) {
    			mdisp.setFile(getConfig().getUserDir()+   File.separator + f.toString());
    		}
    	}
     
    }
    voila ensutie ma classe DispPanel

    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
     
    public class DispPanel extends JPanel{
     
    	private Image img=null;
     
    	public DispPanel() {
    	}
     
    	public void paintComponent(Graphics g){
    		//draw the image
    		if( img != null){
    			 super.paintComponent(g); 
    			g.drawImage(img,0,0,this);
    		}
    	}
     
    	public void setFile(String p_fileName) {
    		try{
    			img=ImageIO.read(new File(p_fileName))
    			repaint();
    		}catch(Exception e){
    			System.out.println ( "Erreur image invalide");     
    		} 	
    	}	
    }
    lorsque le programme démarre, une scrollbar est affiché à l'endroit où l'image va être affiché.... il y a un peu d'espace vers le bas

    je fais afficher une image très grande, la scrollbar est encore là mais elle me permet pas de scroller la dimension de l'image.
    les dimensions du scroll reste identique qu'il y est une image ou non

    or je désirerais avoir accès à toute l'image via le scrollbar

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    je sélectionne l'image, ensuite je clique sur voir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    img=ImageIO.read(new File(p_fileName));
    setPreferredSize(new Dimension(img.getWidth(this),img.getHeight(this)));
    repaint();
    l'image est affiché... mais je dois la maximiser une fois pour que les scrollsbarre aparaisse...

    même si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mdisp= setPreferredSize(new Dimension(500,500));
    dans XXX, ça ne change rien

  11. #11
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    dans la class XXX après avoir appelé mdisp.setFile(...)

    setSize(new Dimension(1001,501));

    redimensionne et donc affiche le scrollbar concernant l'image... mais je ne trouve pas ça "propre" "propre"...

    si quelqu'un a une meilleur solution

  12. #12
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Ah le setPreferredSize suivi du repaint ne fait pas réagir le JScrollPane. Je te propose 2 choses à essayer :
    - faire setSize juste après setPreferredSize dans la méthode setFile (au fait, img.getHeight(this) est exactement ce qu'il fallait faire. null marche aussi, je crois.)
    - appeler repaint non pas sur le JPanel, mais sur le JScrollPane ou sur la JFrame. Sinon validate.

  13. #13
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par xavlours
    Ah le setPreferredSize suivi du repaint ne fait pas réagir le JScrollPane. Je te propose 2 choses à essayer :
    - faire setSize juste après setPreferredSize dans la méthode setFile (au fait, img.getHeight(this) est exactement ce qu'il fallait faire. null marche aussi, je crois.)
    - appeler repaint non pas sur le JPanel, mais sur le JScrollPane ou sur la JFrame. Sinon validate.
    en effet ca fonctionne aussi

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

Discussions similaires

  1. Probleme jscrollpane (scroll bar)
    Par javanoobs1 dans le forum 2D
    Réponses: 1
    Dernier message: 05/05/2010, 18h37
  2. probleme de reinitialisation de la scroll bar
    Par mativito dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 22/01/2010, 18h55
  3. Probleme avec l'event scroll bar
    Par Xx_raaY dans le forum Windows Forms
    Réponses: 0
    Dernier message: 04/06/2009, 16h16
  4. Probleme de scroll bar avec IE.
    Par defacta dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 30/07/2007, 15h36
  5. Probleme avec un scroll bar
    Par pierrot10 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 31/05/2007, 16h02

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