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 :

Table view contre ListView


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 Table view contre ListView
    Bonjour,

    En JavaFx 2, je voudrais afficher des listes de données.

    Idéalement, je voudrais un listView qui afficherait pour chaque item plusieurs controles...

    Exemple

    Item1 de mon listView
    Nom Prénom Age
    Numéro de permis de conduire date de création
    Item2 de mon listView
    Nom Prénom Age
    Numéro de permis de conduire date de création
    ....


    Ce qui veut dire que le table view est mal adapté pour ce genre de cas puisque (dans mon exemple), j'ai une ligne sur deux avec trois champs et l'autre avec seulement 2.

    Aussi, je voudrais non seulement pouvoir détecter sur quel Item j'ai cliqué (ce qui semble facile) mais aussi sur quel champ de mon item j'ai cliqué, ce qui semble plus compliqué...

    Est ce une utopie de pouvoir faire ça ?
    La plupart des exemples que je trouve sont des listView de String mais pas des ListView d'objets.

    Merci pour vos réponses ou commentaires

  2. #2
    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
    Bon,

    Je précise un peu ma demande....
    Le code ci-après permet de créer un ListView qui contient différents contrôles (Hbox, Vbox, Label, Text)
    En cliquant sur une ligne de mon ListView, j'arrive bien sûr à retrouver l'objet qui a été cliqué mais...
    ce que je voudrais c'est savoir quel est le contrôle qui a été cliqué sur la ligne de mon ListBox.
    Dans l'exemple ci-dessous, je voudrais savoir si l'utilisateur a cliqué sur le nom, le prix ou le label.


    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
     
     
    public class ChargementNewModelController {
     
    @FXML
    	private ListView<CustomThing> lvObj;// a été créé via scenebuilder
     
    ObservableList<CustomThing> datacustom = FXCollections.observableArrayList();
     
    private void initialize() {
     
     
    		datacustom.addAll(new CustomThing("Cheese", 123), new CustomThing("Horse", 456), new CustomThing("Jam", 789));
    		lvObj.setItems(datacustom);
     
    		lvObj.setCellFactory(new Callback<ListView<CustomThing>, ListCell<CustomThing>>() {
     
                @Override
                public ListCell<CustomThing> call(ListView<CustomThing> arg0) {
                    return new ListCell<CustomThing>() {
     
                        @Override
                        protected void updateItem(CustomThing item, boolean bln) {
                            super.updateItem(item, bln);
                            if (item != null) {
                                VBox vBox = new VBox();
                               vBox.getChildren().addAll(new Text(item.getName()) , new Text(String.format("%d $", item.getPrice()))     ) ;
                               HBox hBox = new HBox();
                               hBox.getChildren().addAll(new Label("[Graphic]"), vBox);
                               hBox.setSpacing(20);
                               setGraphic(hBox);
                            }
                        }
     
                    };
                }
     
            });
     
     
    }
    private static class CustomThing {
    	        private String name;
    	        private int price;
    	        public String getName() {
    	            return name;
    	        }
    	        public int getPrice() {
    	            return price;
    	        }
    	        public CustomThing(String name, int price) {
    	            super();
    	            this.name = name;
    	            this.price = price;
    	        }
     
    	    }
     
    }

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    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 904
    Billets dans le blog
    54
    Par défaut
    Il faut que tu mettes des écouteurs souris sur chacun des éléments qui composent ta cellule.
    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

  4. #4
    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
    Ce n'est donc pas une utopie de pouvoir faire ça puisqu'il me suffit de mettre par exemple un textField comme contrôle sur mon listView pour que la souris sélectionne le textField plutôt que l'élément du listView.

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    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 904
    Billets dans le blog
    54
    Par défaut
    Dans ce code de test-ci la sélection dans la liste a lieu si je clique sur le Label ou a coté mais pas sur le TextField. Mais on est pas a l’abri d'un bug JavaFX 2 qui aurait été corrigé dans JavaFX 8.

    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
    public class Main extends Application {
     
        private static class EditorCell extends ListCell<String> {
     
            final private Label text = new Label();
            final private TextField editor = new TextField();
            final private VBox content = new VBox(text, editor);
     
            public EditorCell() {
            }
     
            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                setText(null);
                setGraphic(empty || item == null ? null : content);
                text.setText(item);
                editor.setText(item);
            }
        }
     
        @Override
        public void start(Stage primaryStage) {
            final ListView<String> listView = new ListView();
            listView.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
     
                @Override
                public ListCell<String> call(ListView<String> param) {
                    return new EditorCell();
                }
            });
            listView.getItems().addAll("Faa", "Fee", "Fii", "Foo", "Fuu", "Fyy");
            listView.getSelectionModel().selectedItemProperty().addListener(new InvalidationListener() {
     
                @Override
                public void invalidated(Observable observable) {
                    System.out.println(listView.getSelectionModel().getSelectedItem());
                }
            });
            final StackPane root = new StackPane();
            root.getChildren().add(listView);
            final Scene scene = new Scene(root, 300, 250);
            primaryStage.setTitle("Hello World!");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
     
        public static void main(String[] args) {
            launch(args);
        }
    }
    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. [JTA] Problème : Table/View existe déjà dans schéma
    Par max224 dans le forum Java EE
    Réponses: 1
    Dernier message: 30/04/2013, 15h06
  2. Table Access contre fichier texte
    Par sebbonard dans le forum VB.NET
    Réponses: 7
    Dernier message: 23/10/2012, 10h08
  3. Réponses: 0
    Dernier message: 03/05/2012, 21h44
  4. Tables créées contre mon gré
    Par jamespage dans le forum SQL
    Réponses: 1
    Dernier message: 26/10/2010, 11h55
  5. Table temporaire contre performent ?
    Par rad_hass dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 29/01/2009, 20h16

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