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 :

JScrollBar max=90 + pb verticale


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Par défaut JScrollBar max=90 + pb verticale
    Bonjour à tous,

    J'ai 2 petits problèmes à vous soumettre.

    1.

    J'ai créé 2 JScrollBar. L'une verticale, l'autre horizontale.
    J'ai également 2 JTextField qui me permettent d'afficher la valeur de la scrollbar, à chaque clic que celle-ci. (Je clique sur la scrollbar horizontale et le textfield correspondant change de valeur en conséquence).

    Tout ceci marche très bien, mis à part que lorsque je mets le curseur au maximum de la scrollbar, la valeur affichée est 90 !!
    Or, quand je fais getMaximum(), j'obtiens bien 100 (valeur par défaut que je n'ai pas modifiée).

    Et je précise que cela le fait sur les 2 scrollbars.
    Je ne vois pas d'où peut venir ce problème !!??!!


    2.

    Mon 2e petit problème concerne ma scrollbar verticale.
    Comme vous le savez, par défaut, lorsque le curseur est en haut, c'est le minimum, et le curseur en bas, c'est le maximum. La flèche du haut, fait monter le curseur, la flèche du bas le fait descendre.

    Dans certaines documentations, il était noté que pour changer le sens, il fallait changer setUnitIncrement() en mettant l'incrément en négatif.
    En faisant cela, cela change le sens des flèches (on clique en bas pour faire monter le curseur, et on clique en haut pour faire descendre le curseur).
    Moi ce que je veux, c'est que le curseur parte d'en bas, à la valeur 0.

    Quelqu'un aurait un petit exemple à me donner pour que j'inverse ma scrollbar ??




    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
    /*
     * Created on 6 nov. 2007
     */
    package tests_IG;
     
    import java.awt.AWTEvent;
    import java.awt.Dimension;
    import java.awt.event.AdjustmentEvent;
    import java.awt.event.AdjustmentListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollBar;
    import javax.swing.JTextField;
     
     
    public class ScrollBarres extends JFrame{
      JPanel conteneur;
      JTextField txtf_h=new JTextField();
      JTextField txtf_v=new JTextField();
      JScrollBar scroll_h=new JScrollBar(0); // 1/vide = vertical, 0 = horizontal
      JScrollBar scroll_v=new JScrollBar();
     
     
      // constructeur
      public ScrollBarres(){
        enableEvents(AWTEvent.WINDOW_EVENT_MASK);
        try {
          jbInit();
        }
        catch(Exception e) {
          e.printStackTrace();
        }   
      } 
     
     
      private void jbInit() throws Exception{
        // dimensions (largeur, hauteur) et titre de la fenêtre
        this.setSize(new Dimension(360, 250));
        this.setTitle("Test : Scrollbars horizontale et verticale");    
     
        // la classe WindowAdapter implémente l'interface WindowListener, on peut donc l'utiliser sans redéfinir toutes les méthodes
        WindowAdapter win=new WindowAdapter(){
          	public void windowClosing(WindowEvent arg0) { //ferme la fenêtre
          	  System.exit(0); 
          	}
        };
        // association du gestionnaire d'événements à la fenêtre
        this.addWindowListener(win);  
     
        // construction du conteneur (sans gestionnaire de mise en forme)
        conteneur=(JPanel) this.getContentPane();
        conteneur.setLayout(null);
     
        // textfields
        txtf_h.setBounds(220,25,40,20);
        txtf_h.setBackground(null); // en mettant à null, il prend la couleur de la JFrame
        txtf_h.setFocusable(false);
        txtf_v.setBounds(60,75,40,20);
        txtf_v.setBackground(null); 
        txtf_v.setFocusable(false);
     
        // scrollbar
        scroll_h.setBounds(25,25,180,20);
        scroll_h.addAdjustmentListener(new AdjustmentListener()
            {
          		public void adjustmentValueChanged(AdjustmentEvent arg0) {
          		  scroll_valeur_h(arg0);
          		}
            }
        );
        scroll_v.setBounds(25,75,20,100);   
        scroll_v.setAutoscrolls(true);
        scroll_v.setUnitIncrement(-5);
        scroll_v.addAdjustmentListener(new AdjustmentListener()
            {
          		public void adjustmentValueChanged(AdjustmentEvent arg0) {
          		  scroll_valeur_v(arg0);
          		}
            }
        );
     
        // ajout des composants au conteneur
        conteneur.add(txtf_h);
        conteneur.add(txtf_v);
        conteneur.add(scroll_h);
        conteneur.add(scroll_v);
     
      }
     
     
      protected void scroll_valeur_h(AdjustmentEvent arg0) {
        txtf_h.setText(""+scroll_h.getValue()); // on doit mettre "" car setText requiert un String, et non un int
        System.out.println("max h : "+scroll_h.getMaximum()); 
      }
     
      protected void scroll_valeur_v(AdjustmentEvent arg0) {
        txtf_v.setText(""+scroll_v.getValue()); 
      }
     
     
      public static void main(String[] args) {
        // affichage du formulaire
        new ScrollBarres().setVisible(true);
      }
    }
    Merci d'avance à quiconque aurait une aide à m'apporter.

  2. #2
    Membre émérite
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Par défaut
    Bon, j'ai trouvé une solution à mon 1er problème.

    J'ai rajouté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scroll_v.setVisibleAmount(0);
    Je pensais que ça allait masquer mes flèches, mais non, elles n'ont pas changé.
    Par contre, je ne comprend toujours pas à quoi correspond vraiment ce VisibleAmount ...

  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
    Bonjour,

    en fait, dans ton premier bout de code, le "thumb" de la scroll bar (le truc qui se déplace dans le rail) avait pour longueur 10. La valeur de la ScrollBar, i.e. le début du thumb pouvait varier de 0 à 90, et la fin du thumb de 10 à 100.

    En appelant setVisibleAmount(0), la scrollbar considère que son thumb a pour longueur 0, ce qui lui permet de se déplacer jusqu'à 100. Ensuite, comment c'est géré par rapport à l'affichage, c'est propre au Look and Feel et je ne sais pas ce que ça fait.

    Sinon, un bon moyen d'estimer la position de la scrollbar est de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int percent = 100 * getValue() / (getMaximum() - getVisibleAmount() - getMinimum());
    Puisque la valeur de la scrollbar peut en fait varier de getMinimum() à getMaximum()-getVisibleAmount().
    "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 émérite
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Par défaut
    Ah d'accord !!!!!!!!!!!!

    Je comprends mieux maintenant à quoi ça correspond.
    Je rajoute ça dans mes notes, c'est le genre de choses qu'on ne trouve pas facilement dans la documentation.

    Merci de m'avoir éclairée xavlours

  5. #5
    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
    C'est vrai que c'est pas forcément clair, il faut aller voir du côté de BoundedRangeModel pour comprendre un peu mieux. En général, pour comprendre un composant Swing, regarder si il n'utilise pas un Model pour stocker les données est une bonne idée.

    Et cliquer sur Résolu aussi est une bonne idée
    "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.

  6. #6
    Membre émérite
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Par défaut
    Lol, non, je ne peux pas mettre résolu, puisque je n'ai pas trouvé de solution à mon 2e problème

Discussions similaires

  1. [CR9] Centrer verticalement le texte
    Par CDRIK dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 22/05/2009, 19h33
  2. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  3. VGA : synchro verticale (et horizontale ?)
    Par Blustuff dans le forum Assembleur
    Réponses: 19
    Dernier message: 21/06/2003, 08h46
  4. opengl et 3dstudio max
    Par maamar dans le forum OpenGL
    Réponses: 3
    Dernier message: 28/09/2002, 20h48
  5. taille max du nom d'un champ
    Par hna dans le forum Paradox
    Réponses: 2
    Dernier message: 28/07/2002, 02h40

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