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 :

A quoi sert JSlider.setExtent() ?


Sujet :

Composants Java

  1. #1
    Membre à l'essai Avatar de natalia.f
    Femme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2018
    Messages : 14
    Points : 23
    Points
    23
    Par défaut A quoi sert JSlider.setExtent() ?
    bonjour,

    je travaille sur un jslider en java et jai beau relire la documentation et des tutoriels dans tous les sens je ne comprend pas a quoi sert la méthode setExtent()

    il est marqué: "Sets the size of the range "covered" by the knob."

    quand je change la valeur par exemple a 20, la seule modification que je constate c est que cela m empeche d aller au bout du slider, par exemple si j ai un slider de 0 à 100, que je setExtent à 20, je ne peux plus aller plus loin que la valeur 80 ...

    je ne comprends pas l'intéret de cette methode, quelqu un sait dans quel cas c est utile ?

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    ets the size of the range "covered" by the knob. Most look and feel implementations will change the value by this amount if the user clicks on either side of the knob. This method just forwards the new extent value to the model.
    En theorie : lorsque le skin respecte cette valeur, c'est la valeur utilisée pour décaler le curseur d'un coté ou de l'autre lorsque l'utilisateur clique avec la souris sur l'espace vide de part et d'autres du curseur.

    En pratique : ben ca marche pas comme ca avec le skin par defaut... et effectivement ca bloque comme tu l'as decrit.

    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
    package jslider.extend;
     
    import javax.swing.*;
    import java.awt.*;
     
    public final class Main {
        public static void main(String... args) {
            SwingUtilities.invokeLater(Main::test);
        }
     
        private static void test() {
            final var slider = new JSlider(0, 100);
            slider.setPaintTicks(true);
            slider.setPaintLabels(true);
            slider.setMajorTickSpacing(20);
            slider.setMinorTickSpacing(5);
            slider.setExtent(20);
            slider.addChangeListener(event -> System.out.println(slider.getValue()));
            final var frame = new JFrame("Test");
            frame.setLayout(new BorderLayout());
            frame.add(slider, BorderLayout.CENTER);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(500, 500);
            frame.setVisible(true);
        }
    }
    On retrouve la notion d'extent dans le BoundedRangeModel qui sert de base a JSlider mais aussi d'autres contrôles et dans ce cas la doc eclaire sur le comportement actuel en expliquant pourquoi on ne peut pas aller au delà de 80. Donc ici c'est bien la doc de JSlider qui est dans le faux et cette valeur ne sert en aucun cas a deplacer le curseur a droite ou a gauche en fonction des clics.

    Defines the data model used by components like Sliders and ProgressBars. Defines four interrelated integer properties: minimum, maximum, extent and value. These four integers define two nested ranges like this:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    minimum <= value <= value+extent <= maximum
    The outer range is minimum,maximum and the inner range is value,value+extent. The inner range must lie within the outer one, i.e. value must be less than or equal to maximum and value+extent must greater than or equal to minimum, and maximum must be greater than or equal to minimum. There are a few features of this model that one might find a little surprising. These quirks exist for the convenience of the Swing BoundedRangeModel clients, such as Slider and ScrollBar.

    • The minimum and maximum set methods "correct" the other three properties to accommodate their new value argument. For example setting the model's minimum may change its maximum, value, and extent properties (in that order), to maintain the constraints specified above.
    • The value and extent set methods "correct" their argument to fit within the limits defined by the other three properties. For example if value == maximum, setExtent(10) would change the extent (back) to zero.
    • The four BoundedRangeModel values are defined as Java Beans properties however Swing ChangeEvents are used to notify clients of changes rather than PropertyChangeEvents. This was done to keep the overhead of monitoring a BoundedRangeModel low. Changes are often reported at MouseDragged rates.
    Mieux vaut donc la laisser a 0.

    Sinon pour être plus précis, en l’état et en ignorant ce que dit la doc de la classe, extent permet de connaître la taille de l'intervalle sélectionné lorsqu'on déplace le curseur si, par exemple, on décide d'utiliser JSlider pour sélectionner un intervalle... ce qui est débile, tu en conviendras, si le contrôle est utilisé avec les skins par défaut qui affichent... uniquement un seul curseur. Donc en mettant le curseur sur 80 tu peux sélectionner l'intervalle [80, 100] et pas juste la valeur 80.
    Par contre, ça devient une valeur bien plus utile pour quiconque définira un skin de JSlider avec 2 curseurs ou qui affiche une représentation de l'intervalle de sélection sur le contrôle lui-meme !
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre à l'essai Avatar de natalia.f
    Femme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2018
    Messages : 14
    Points : 23
    Points
    23
    Par défaut
    super réponse bouye, merci, j'ai compris! c'est bon a savoir, j avais oublie que l on pouvait mettre en place des slider avec deux curseurs et des intervalles.

    A la base j avais essaye d utiliser cette methode pour forcer le deplacement de mon curseur en "sauts", et pour cela j ai cru qu il fallait utiliser extent, mais en fait c est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FSlider.setSnapToTicks(true);
    qui convient.

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

Discussions similaires

  1. A quoi sert XML-Schema
    Par Community Management dans le forum Valider
    Réponses: 20
    Dernier message: 26/01/2009, 09h52
  2. à quoi sert le délestage?
    Par r0d dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 5
    Dernier message: 06/10/2004, 14h34
  3. a quoi sert le schema dans postgres ??
    Par champion dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 13/09/2004, 10h25
  4. [info] A quoi sert ImageObserver ?
    Par FrigoAcide dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 22/03/2004, 17h20

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