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 :

Placer le scroll du contextMenu où on veut dans le comboBox


Sujet :

JavaFX

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Placer le scroll du contextMenu où on veut dans le comboBox
    Bonjour,

    Je suis novice sous JavaFx mais ce que je veux faire est natif sur du Swing je ne comprends pas pourquoi ce n'est pas la même chose en Java FX

    J'ai une comboBox avec une centaine de valeur quand je tape M au clavier je set la valeur du ComboBox avec le 1er item qui commence par M par _cbType.setValue
    Il y a la bonne valeur sur le ComboBox et quand j'ouvre le contextMenu je vois bien que mon item en bas est en surbrillance donc sélectionné mais le scroll est toujours en haut
    J'aimerai que le scroll descende où il y a mon item.


    En vous remerciant par avance pour votre aide

    Bonne journée

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 852
    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 852
    Points : 22 869
    Points
    22 869
    Billets dans le blog
    51
    Par défaut
    De quelle version de JavaFX s'agit-il ?

    A priori un bug ou un oubli. Il est aussi possible que ce comportement auquel on est habitué est uniquement présent sous certains OS (Windows, macOS) et pas d'autres (des toolkits X plus anciens pour Unix) et donc qu'il n'a pas été retenu lors de la conception du contrôle.

    Ceci semble corriger le soucis en JavaFX 21. Après avoir sélectionné la nouvelle valeur, il faut accéder a la skin du contrôle, trouver la ListView qui affiche les données et la forcer a scroller jusqu’à la valeur sélectionnée.

    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
    package test.comboscroll;
     
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.ComboBox;
    import javafx.scene.control.ListView;
    import javafx.scene.control.skin.ComboBoxListViewSkin;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
     
    import java.util.stream.IntStream;
     
    public final class Main extends Application {
        @Override
        public void start(final Stage stage) throws Exception {
            // Generate data.
            final var values = IntStream.range('a', 'z')
                    .mapToObj(i -> {
                        final char c = (char)i;
                        final var s = String.valueOf(c);
                        return s.repeat(10);
                    })
                    .toList();
            // UI.
            final var comboBox = new ComboBox<String>();
            comboBox.getItems().setAll(values);
            comboBox.getSelectionModel().select(0);
            // Select value on key press.
            comboBox.setOnKeyPressed(event -> {
                final var keyCode = event.getCode();
                if (keyCode.isLetterKey()) {
                    final var key = keyCode.getName().charAt(0);
                    final var test = String.valueOf(key).toLowerCase();
                    values.stream()
                            .filter(s -> Objects.nonNull(s) && s.startsWith(test))
                            .findFirst()
                            .ifPresent(s -> {
                                // Selection.
                                comboBox.getSelectionModel().select(s);
                                // Scroll in popup.
                                final var skin = (ComboBoxListViewSkin<String>) comboBox.getSkin();
                                final var list = (ListView<String>) skin.getPopupContent();
                                list.scrollTo(s);
                            });
                }
            });
            final var root = new StackPane();
            root.getChildren().add(comboBox);
            final var scene = new Scene(root);
            stage.setTitle("Test");
            stage.setWidth(800);
            stage.setHeight(600);
            stage.setScene(scene);
            stage.show();
        }
    }
    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
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup cela fonctionne


    Passez une bonne journée

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

Discussions similaires

  1. Afficher une image où l'on veut dans une fenêtre
    Par womannosky dans le forum OpenCV
    Réponses: 9
    Dernier message: 18/10/2012, 15h59
  2. Placer son curseur dans la combobox
    Par Eagle 2 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 16/06/2009, 15h38
  3. Réponses: 4
    Dernier message: 08/10/2008, 13h07
  4. Je n'arrive pas à placer ma scroll bar correctement
    Par striblo67 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 17/08/2007, 09h27
  5. Réponses: 2
    Dernier message: 11/03/2004, 15h20

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