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 :

Slider avec markage personnalisé


Sujet :

AWT/Swing Java

  1. #1
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut Slider avec markage personnalisé
    Je dois créer pour une application un slider où on aimerais bien indiquer des "marques". Le slider permet d'avancer dans une animation et les marques doivent représenter les endroits où il y a des éléments clés de l'animation.
    Malheureusement, avec JSlider, il n'est pas possible de fournir une liste de marques à afficher, elle sont juste affichées à intervale régulier.

    Il faudrait pouvoir cliquer aussi sur ces marques pour aller exactement à cette valeur (pas une ou deux valeurs à coté). Je cherche quelque chose de proche de ce qu'on trouve dans VLC sur ce screenshot, où l'on vois les chapitres de la vidéo dans la timeline:


    Quelqu'un à une idée d'où je peux trouver ça? Pas envie de tout coder

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    on peut afficher des labels à des positions non régulières dans un JSlider avec public void setLabelTable(Dictionary labels). Le problème c'est qu'on ne peut pas cliquer sur les labels pour aller directement à l'endroit associé. Et le look n'a rien à voir avec la seekbar de vlc évidemment.

    Pour limiter le boulot pour faire un slider avec accès direct à des positions, tu peux peut être partir du code fourni avec ce tutoriel :
    https://today.java.net/pub/a/today/2...component.html.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Le problème, c'est que l'exemple utilise un slider sur le coté. J'y avais pensé (slider + JComponent affichant les données, ou marqueurs en surimpression), mais le problème, c'est qu'il n'y a aucun moyen pour savoir où comment et où fini le track du slider, du coup, mes marqueur peuvent être décalés de quelques pixels. Et c'est problématiqué

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ah oui j'avais pas fait gaffe qu'il ne fonctionnait qu'en mode vertical. Dommage, ça fait pas mal de boulot pour le modifier pour qu'il puisse fonctionner en mode horizontal, en particulier pour détecter le clic sur une étiquette.

    J'avais trouvé un autre lien sympa dans le genre, mais il est fait un peu l'inverse de ce que tu veux : il est prévu juste pour empêcher de slider sur des valeurs intermédiaires.Et il date, alors il n'intègre pas la notion de LabelTable.: j'ai pas regardé ce que ça pouvait coûter en temps d'adaptation. Sans parler d'un petit bug bizarre avec le laf metal (mineur dans la mesure ou le laf nimbus est plus joli en ce qui me concerne).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Je crois que je vais finir par modifier le slider de openjide, puisque là j'ai les sources, mais ça m'ennuie d'embarquer toute cette bibliothèque pour juste un composant

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Je crois que je vais finir par modifier le slider de openjide, puisque là j'ai les sources, mais ça m'ennuie d'embarquer toute cette bibliothèque pour juste un composant
    Je connaissais le rangeslider de jide, qu'on utilisait dans ma boite y'a plusieurs années (je suppose qu'il y a les mêmes composants dans jide et openjide), mais je ne savais pas qu'il y avait un slider maintenant (à ma connaissance y'en avait pas à l'époque). Je viens de rejeter un coup d'oeil vite fait mais je ne le trouve pas. Par curiosité, tu as un lien ou un nom de classe ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    oui, il y a un range slider que je compte adapter, pour retirer le range et rajouter les images qui me manquent

    Mon problème pour créer des composants custom, c'est surtout que c'est moche quand je le fais

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    oui, il y a un range slider que je compte adapter, pour retirer le range et rajouter les images qui me manquent
    Ah ok. Je me disais aussi.
    Citation Envoyé par tchize_ Voir le message
    Mon problème pour créer des composants custom, c'est surtout que c'est moche quand je le fais
    C'est un problème commun à beaucoup de développeurs. On est pas forcément des artistes graphistes, mais suffisamment pour nous apercevoir que ce qu'on fait est plutôt moche parfois

    En tout cas, ce composant (celui de vlc) me motive bien personnellement, surtout que pour le moment j'ai rien vu d'équivalent lors de mes recherches. Je vais peut être profiter de mes congés pour me pencher la dessus.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Bon, visiblement, pas grand chose à tirer du RangeSliderUI. Il se base sur le JSliderUI des différent look and feel et se contente de faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dessin normal
    changer le current value sans lancer d'event
    dessin du thumb
    remettre le current value sans lancer d'event


    Par contre en jettant un oeil au code, j'ai vu qu'on peux facilement sur l'UI du slider récupérer le Rectangle du Track et des ticks. Je vais voir comment utiliser ça pour y dessiner des trucs en plus.

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Par contre en jettant un oeil au code, j'ai vu qu'on peux facilement sur l'UI du slider récupérer le Rectangle du Track et des ticks. Je vais voir comment utiliser ça pour y dessiner des trucs en plus.
    En effet, les dimensions du rectangle du track pourraient te permettre de résoudre aussi le problème que tu citais dans ton précédent post :

    Citation Envoyé par tchize_ Voir le message
    Le problème, c'est que l'exemple utilise un slider sur le coté. J'y avais pensé (slider + JComponent affichant les données, ou marqueurs en surimpression), mais le problème, c'est qu'il n'y a aucun moyen pour savoir où comment et où fini le track du slider, du coup, mes marqueur peuvent être décalés de quelques pixels. Et c'est problématiqué
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    TADAAAA

    finalement quand on sais ou chercher, ça va vite


    voilà un 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
    public class MetalTimelineUI extends MetalSliderUI {
     
    	@Override
    	public void paintTicks(Graphics g) {
    		System.out.println("paint ticks "+tickRect);
    		Rectangle tickBounds = tickRect;
    		TimelineView timelineView = (TimelineView)slider;
            AnimationModel model = timelineView.getAnimationModel();
    		Collection<? extends AbstractElementAnimation<?, ?>> surveyed = timelineView.getSurveyed();
            g.translate( 0, tickBounds.y);
    		for (int i : model.getKeyFrames()){
    			List<AbstractElementAnimation<?, ?>> elements = new ArrayList<AbstractElementAnimation<?,?>>(model.getAnimatedElementsAt(i));			
    			if (surveyed!=null)
    				elements.retainAll(surveyed);
    			int xPos = xPositionForValue( i );
    			if (elements.size()>1)
    				paintMajorTickForHorizSlider( g, tickBounds, xPos );
    			else if (elements.size()==1)
    				paintMinorTickForHorizSlider( g, tickBounds, xPos );
    		}
    		g.translate( 0, -tickBounds.y);
    	}
     
    }
    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 TimelineView extends JSlider {
     
    	private static final String uiClassID = "TimelineViewUI";
    	public void setUI(SliderUI ui){
    		super.setUI(ui);
    	}
     
        public void updateUI() {
            if (UIManager.get(getUIClassID()) != null) {
                setUI((SliderUI) UIManager.getUI(this));
            } else {
                setUI(new MetalTimelineUI());
            }
        }
     
        public SliderUI getUI() {
            return (SliderUI) ui;
        }
     
        public String getUIClassID() {
            return uiClassID;
        }

    et le résultat:




    Plus qu'à gérer les clicks, mais ça devrais aller
    Images attachées Images attachées  

  12. #12
    Membre habitué Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Points : 193
    Points
    193
    Par défaut
    Salut Tchize !

    je suis intéressée par ce que tu as fait ... mais il doit manquer un bout de code dans ce que tu as mis de ta classe TimelinsView.
    A quoi correspond : AnimationModel model = timelineView.getAnimationModel(); ?

    D'avance merci
    Chris

  13. #13
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    C'est mon propre modèle de donnée, c'est à partir de celui là que je récupère les information concernant les points à mettre en évidence. Ce n'est pas vraiment relevant pour l'exemple. Dans ton cas ce sera probablement traité différement. Je n'ai mis que le principal: afficher les marqueurs en fonction d'une liste d'index à marquer.

  14. #14
    Membre habitué Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Points : 193
    Points
    193
    Par défaut
    Merci beaucoup de ta réponse, je vais regarder

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

Discussions similaires

  1. Jtable avec model personnalisé
    Par Raphael1980 dans le forum Composants
    Réponses: 2
    Dernier message: 03/03/2009, 21h02
  2. Slider avec 2 poignées
    Par [ced] dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/11/2008, 11h11
  3. WPF : Mise à jour d'un slider avec un Dispatcher
    Par Herwin78800 dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 29/10/2008, 16h43
  4. Type mismatch avec type personnalisé
    Par hn2k5 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/08/2007, 19h46
  5. Gestion d'un slider avec Ms visual studio .NET
    Par clubber dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 13/06/2007, 15h04

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