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 un JScrollPane


Sujet :

AWT/Swing Java

Vue hybride

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

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut Problème avec un JScrollPane
    Bonjour,

    Voila j'ai un soucis avec les scrollBar de mon JScrollPane, je gère un niveau de zoom sur celui ci et je redimensionne donc le JScrollPane ainsi que le maximum de mes scrollBar. Pourtant dans certains cas, impossible d'aller jusqu'au bout du scroll, celui ci bloque avant la fin malgré le fait que l'on atteigne pas la valeur maximum. Quels peut etre l'origine de ce probleme ?

    Merci d'avance pour vos réponses éventuelles !

  2. #2
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    un petit exemple de ton problème ne serait pas de trop

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut
    Bonjour,
    merci pour votre réponse, je vous joins une image qui illustre mon propos, ainsi que le listener utilisé pour controler les scrollbar, en espérant peut etre que vous pourrez m'en dire plus.




    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    package com.litis.transcript.application;
    import java.awt.event.*;
    import java.awt.*;
    import java.awt.*;
    import java.awt.event.AdjustmentEvent.*;
     
    import javax.swing.JScrollBar;
    import javax.swing.JScrollPane;
     
    import org.apache.log4j.Logger;
     
    import com.litis.transcript.application.beans.Zoom;
     
     
     
    public class MyAdjustmentListener implements AdjustmentListener {
     
    	// Instance de log4J pour cette classe
    	private static final Logger logger = Logger.getLogger(MyAdjustmentListener.class);
     
            // This method is called whenever the value of a scrollbar is changed,
            // either by the user or programmatically.
     
    		Zoom zoomControl = null;
    		JScrollPane manuscritScroll = null; // Correspond à la JInternalFrame de gauche
    		JScrollPane saisieScroll = null; // Correspond à la JInternalFrame de droite
     
    		MyAdjustmentListener(Zoom zoomControl){
    			this.zoomControl = zoomControl;		
    		}
     
     
     
            public JScrollPane getManuscritScroll() {
    			return manuscritScroll;
    		}
     
     
     
    		public void setManuscritScroll(JScrollPane manuscritScroll) {
    			this.manuscritScroll = manuscritScroll;
    		}
     
     
     
    		public JScrollPane getSaisieScroll() {
    			return saisieScroll;
    		}
     
     
     
    		public void setSaisieScroll(JScrollPane saisieScroll) {
    			this.saisieScroll = saisieScroll;
    		}
     
     
     
    		public void adjustmentValueChanged(AdjustmentEvent evt) {
                Adjustable source = evt.getAdjustable();
     
                // Determine which scrollbar fired the event
                int orient = source.getOrientation();
                int value = evt.getValue();
                if(zoomControl.isSynchronisation() && manuscritScroll != null && saisieScroll != null){
                    if (orient == Adjustable.HORIZONTAL) {
                        // On boit bouger la barre horizontale des deux JPanel si la synchro est on
                    	if(evt.getSource() == manuscritScroll.getHorizontalScrollBar()){ // On a bougé coté manuscrit
                    		// On change la valeur de saisie
                    		saisieScroll.getHorizontalScrollBar().setValue(value);
                    	}
                    	else{ // On a bougé coté saisie
                    		// On change la valeur de manuscrit
                    		manuscritScroll.getHorizontalScrollBar().setValue(value);
                    	}
                    } 
                    else if(orient == Adjustable.VERTICAL) {
                        // On boit bouger la barre verticale des deux JPanel si la synchro est on
                    	if(evt.getSource() == manuscritScroll.getVerticalScrollBar()){ // On a bougé coté manuscrit
                    		// On change la valeur de saisie
                    		saisieScroll.getVerticalScrollBar().setValue(value);
                    	}
                    	else{ // On a bougé coté saisie
                    		// On change la valeur de manuscrit
                    		manuscritScroll.getVerticalScrollBar().setValue(value);
                    	}                	
                    }            	
                }
     
                if(manuscritScroll != null && saisieScroll != null){
                    	dimensionnerScrollPane();  
                        if(logger.isDebugEnabled()){
                        	logger.debug("On vient de redimensionner les ascenceurs de manuscrit et saisie, les nouvelles valeurs sont :");
                        	logger.debug("ScrollBar Horizontale : "+manuscritScroll.getHorizontalScrollBar().getValue()+"/"+(manuscritScroll.getHorizontalScrollBar().getMaximum()-manuscritScroll.getHorizontalScrollBar().getVisibleAmount()));
                        	logger.debug("ScrollBar Verticale : "+manuscritScroll.getVerticalScrollBar().getValue()+"/"+(manuscritScroll.getVerticalScrollBar().getMaximum()-manuscritScroll.getVerticalScrollBar().getVisibleAmount()));
                        	logger.debug("Scrollbar horizontale pas : "+manuscritScroll.getHorizontalScrollBar().getUnitIncrement());
                        }         
     
                    dimensionnerScrollBar();
                }
            }
     
    		public void dimensionnerScrollPane(){
    			double tempTab[] = zoomControl.getTableauZoomCombo();
    			manuscritScroll.setMaximumSize(new Dimension((int)(zoomControl.getWidth()*tempTab[zoomControl.getZoomComboBoxValue()]+1),(int)(zoomControl.getHeight()*tempTab[zoomControl.getZoomComboBoxValue()]+1)));
    			manuscritScroll.setPreferredSize(new Dimension((int)(zoomControl.getWidth()*tempTab[zoomControl.getZoomComboBoxValue()]+1),(int)(zoomControl.getHeight()*tempTab[zoomControl.getZoomComboBoxValue()]+1)));
    			manuscritScroll.revalidate();
    			if(zoomControl.isSynchronisation()){
    				saisieScroll.setMaximumSize(new Dimension((int)(zoomControl.getWidth()*tempTab[zoomControl.getZoomComboBoxValue()]+1),(int)(zoomControl.getHeight()*tempTab[zoomControl.getZoomComboBoxValue()]+1)));
    				saisieScroll.setPreferredSize(new Dimension((int)(zoomControl.getWidth()*tempTab[zoomControl.getZoomComboBoxValue()]+1),(int)(zoomControl.getHeight()*tempTab[zoomControl.getZoomComboBoxValue()]+1)));
    				manuscritScroll.revalidate();
    			}
    		}
     
    		public void dimensionnerScrollBar(){
    			double tempTab[] = zoomControl.getTableauZoomCombo();
    			System.out.println(manuscritScroll.getHorizontalScrollBar().getVisibleAmount());
    			manuscritScroll.getHorizontalScrollBar().setMaximum((int)(zoomControl.getWidth() * tempTab[zoomControl.getZoomComboBoxValue()]+1));
    			manuscritScroll.getVerticalScrollBar().setMaximum((int)(zoomControl.getHeight() * tempTab[zoomControl.getZoomComboBoxValue()]+1));	
    			if(zoomControl.isSynchronisation()){
    				saisieScroll.getHorizontalScrollBar().setMaximum((int)(zoomControl.getWidth() * tempTab[zoomControl.getZoomComboBoxValue()]+1));
    				saisieScroll.getVerticalScrollBar().setMaximum((int)(zoomControl.getHeight() * tempTab[zoomControl.getZoomComboBoxValue()]+1));		
    			}
    		}
     
    		public boolean doDimensionnerScrollPane(){
    			double tempTab[] = zoomControl.getTableauZoomCombo();
    			boolean retour = true;
    			Dimension manuscritDimension = manuscritScroll.getMaximumSize();
    			Dimension newManuscritDimension = new Dimension((int)(zoomControl.getWidth()*tempTab[zoomControl.getZoomComboBoxValue()]+1),(int)(zoomControl.getHeight()*tempTab[zoomControl.getZoomComboBoxValue()]+1));
    			if((Math.abs(manuscritDimension.getWidth() - newManuscritDimension.getWidth()) < 2) &&
    				(Math.abs(manuscritDimension.getHeight() - newManuscritDimension.getHeight()) < 2)){
    				retour = false;
    			}
     
    			return retour;
    		}
    }

  4. #4
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    je suis pas un expert la dedans, mais je me dis que gérer ton zoom en agissant sur des modifications de scrollbar, ca peut être embétant...
    N'y a t-il pas moyen de s'en sortir en laissant Swing gérer les scroll de façons standard et n'utiliser que des méthodes du JViewport pour modifier la portion visualisée (par exemple, setViewSize(...) et setViewPosition(...) ) ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut
    En fait j'ai procédé comme ca parce que mon container est bien plus grand que l'image affichée, si je laisse les scrollbar en automatique, elles deviennent beaucoup trop grande

    setViewSize(...) et setViewPosition(...) je ne connais pas, je vais me renseigner à ce niveau, pourrais tu m'en dire un peu plus de ton côté ?
    Je ferai quelques tests aujourd'hui, merci pour m'avoir guidé

  6. #6
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    ma solution ne semble pas pouvoir t'aider.
    peut-être peux-tu te baser sur les autres posts associés au même problème :
    http://www.developpez.net/forums/arc.../t-119636.html .

Discussions similaires

  1. Problème avec les JScrollPane
    Par legentil dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 09/08/2009, 21h44
  2. Problème avec le composant JScrollPane
    Par vidocq dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 04/04/2006, 09h02
  3. [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
  4. [JScrollPane] Problème avec la taille du composant interne
    Par wikers dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 11/09/2005, 15h03
  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