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

JavaFX Discussion :

scrollbar ne réagit pas


Sujet :

JavaFX

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut scrollbar ne réagit pas
    Bonjour,

    Question de débutant...

    J'ai créé avec scene builder une scrollbar.

    J'y ai ajouté sur pratiquement tous les événements un lien vers handelOnScroll :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @FXML
    	private void handelOnScroll() {
    		lblMessage.setText("Je scroll");
     
     
    	}
    dans mon FXML j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ScrollBar fx:id="scrollLv" layoutX="326.0" layoutY="44.0" onRotate="#handelOnScroll" onRotationFinished="#handelOnScroll" onRotationStarted="#handelOnScroll" onScroll="#handelOnScroll" onScrollFinished="#handelOnScroll" onScrollStarted="#handelOnScroll" onSwipeDown="#handelOnScroll" onSwipeUp="#handelOnScroll" onTouchMoved="#handelOnScroll" onTouchPressed="#handelOnScroll" orientation="VERTICAL" prefHeight="181.0" prefWidth="14.0" />
    J'ai beau cliquer sur les flèches, sur le curseur, faire bouger le curseur, jamais mon événement "handelOnScroll" ne se déclenche.

    Les seuls événements qui déclenchent sont OnMouse... comme par exemple "onMouseEntered="#handelOnScroll"".

    Pourquoi est-ce que les événements onScroll ne fonctionnent pas ?

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Pour le scroll tu ne dois pas essayer d'utiliser un callback dans le FXML ; il te faut mettre un écouteur sur la propriete value dans le contrôleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
    public void initialize(URL url, ResourceBundle rb) { 
        scrollLv.valueProperty().addListener(observable -> lblMessage.setText("Je scroll"));
    }
    Note : onScroll, etc. c'est pour les gestes de défilement avec les doigts sur un écran tactile*, onRotate, etc. c'est pour les gestes de rotation avec les doigts sur un écran tactile, etc.

    *Donc ça se positionne sur le pane à scroller et non pas la scroll bar elle-même.

    A noter qu'il est possible d'activer le mode touch sur PC de bureau via le flag de la JVM: -Dcom.sun.javafx.touch=true. Par contre du coup certains contrôles (dont la scroll bar) auront des aspects différents. On peut alors émuler certains gestes tactiles (mais pas tous) avec la souris.
    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 éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Bonjour,

    Merci pour ta réponse et tes explications.
    Ca fonctionne comme souhaité.

  4. #4
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 134
    Billets dans le blog
    5
    Par défaut
    Je me permet de rebondir sur cette discussion car j'ai un problème similaire.
    Dans mon cas j'ai plusieurs ScrollBar qui ont le même comportement donc je voudrais créer une fonction qui réponde pour tous.
    Mais je dois quand même savoir qui a appelé cette fonction.

    Voici ma fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private void handleSc(Observable o) {
    		ScrollBar sc=(ScrollBar) o;
    	}
    A l'initialisation voici ce que j'ai mis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scnivaux[j].valueProperty().addListener(observable -> this::handleSc);
    Il semblerais que ça ne soit pas correcte car j'ai des messages d'erreur sur le addListener il semble que mon handleSc ne soit pas au bon format

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Lesquelles ? Et est-tu en JDK 8 avec des sources compilées au format JDK 8 ?
    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

  6. #6
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 134
    Billets dans le blog
    5
    Par défaut
    Oui je suis avec le jdk 8_73
    Par contre en fouillant un peu j'ai trouvé ça
    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
     
    for (int j = 0; j < 12; j++) {
    			scnivaux[j].valueProperty().addListener(new ChangeListener<Number>() {
    				public void changed(ObservableValue<? extends Number> ov, Number old_val, Number new_val) {
    					int usedPA = 0;
    					for (int ij = 0; ij < 12; ij++) {
    						usedPA += (int) scnivaux[ij].getValue();
    					}
    					if (maxPA - usedPA >= 0) {
    						lblMaxPA.setText("Points restants " + (maxPA - usedPA));
    						for (int ij = 0; ij < 12; ij++)
    							lblnivaux[ij].setText("" + (int) scnivaux[ij].getValue());
    					} else {
    						for (int ij = 0; ij < 12; ij++) {
    							String st = lblnivaux[ij].getText();
    							int val = Integer.parseInt(st);
    							scnivaux[ij].setValue(val);
    						}
    					}
    				}
    			});
    			scnivaux[j].setValue(0);
    			lblnivaux[j].setText("0");
    		}
    Ca répond à mon problème mais par contre je ne peux pas savoir quel ScrollBar à déclenché l'évènement.
    D'une manière générale quand on a une série de composant (boutons scrollbar ...) qui répondent de la même manière, je sais le faire avec Swing mais je n'arriva pas à trouver comment le faire en JavaFX

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Des tests du genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    observableValue == scnivaux[x].valueProperty()
    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

  8. #8
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 134
    Billets dans le blog
    5
    Par défaut
    J'y ai bien pensé mais que ce passe t'il si j'ai deux scrollBar avec la même valeur

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Non, tu ne compares pas la valeur reçue ici mais l'objet propriété donc aucune chance que deux barres de défilement se partagent le même. En plus la boucle de ce test se réduit bien à une simple expression avec les streams du JDK8.
    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

  10. #10
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 134
    Billets dans le blog
    5
    Par défaut
    Ok c'est pas évident à comprendre du premier coup.
    Donc un code de ce genre devrait fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void changed(ObservableValue<? extends Number> ov, Number old_val, Number new_val) {
    int n=0;
    boolean trouve=false;
    while(n<12 && !trouve){
      trouve= (ov == scnivaux[n].valueProperty());
      n++;
    }

  11. #11
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Ou un truc du genre (de mémoire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    final Optional<ScrollBar> source = Arrays.stream(scnivaux)
        .filter(scrollBar -> ov == scrollBar.valueProperty())
        .findFirst();
    source.ifPresent(scrollBar -> [...]);
    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

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

Discussions similaires

  1. onChange ne réagit pas
    Par tomchaz dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 12/07/2006, 17h17
  2. Editbox d'activeX qui ne réagit pas au backspace
    Par mr.saucisse dans le forum MFC
    Réponses: 18
    Dernier message: 01/03/2006, 18h35
  3. TCombboxEx ne réagit pas à la saisie
    Par SkYsO dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/02/2006, 18h25
  4. Supprimer la scrollbar verticale mais pas l'horizontale
    Par Prue dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 18/07/2005, 11h24

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