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 :

Insérer différents éléments dans la même colonnes d'un tabelView


Sujet :

JavaFX

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Par défaut Insérer différents éléments dans la même colonnes d'un tabelView
    Bonjour,

    Je voudrais savoir comment peut-on insérer différents éléments dans la même colonne d'un tableView
    dans ma vue (FXML) j'ai une combobox qui contient des personnes, un textfield pour saisir le numéro de personne, n bouton ajouter et un table View

    fichier fxml

    Code XML : 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
    <SplitPane dividerPositions="0.3002754820936639" focusTraversable="true" prefHeight="160.0" prefWidth="200.0">
                          <items>
                            <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
                              <children>
                                <TableView fx:id="personnes" minWidth="0.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                                  <columns>
                                    <TableColumn prefWidth="200.0" text="Peronnes" fx:id="column">
    									<cellValueFactory>
    										<PropertyValueFactory property="nom" />
    									</cellValueFactory>
    								</TableColumn>
                                  </columns>
                                </TableView>
                              </children>
                            </AnchorPane>
                            <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
                              <children>
                                <ComboBox fx:id="listPeronnes"  layoutX="25.0" layoutY="40.0" prefWidth="148.0">
                                </ComboBox>
                                <TextField layoutX="25.0" layoutY="95.0" prefWidth="149.0" />
                                <Label layoutX="25.0" layoutY="78.0" prefWidth="66.0" text="numero" />
                                <Label layoutX="25.0" layoutY="14.0" prefWidth="66.0" text="Personnes" />
                                <Button onAction="#handleAdd"  layoutX="25.0" layoutY="121.0" mnemonicParsing="false" text="Ajouter" />
                              </children>
                            </AnchorPane>
                          </items>
                        </SplitPane>

    pour remplir tableView, l'utilisateur peut soit choisir une personne dans la combobox puis l'jouter en cliquant sur le bouton ajouter, soir de saisir le numéro de personne, et dans ce cas là c'est le numéro qui sera ajouter à la table
    J'arrive à inserer le nom mais pas le numéro, je ne vois pas comment faire


    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
    import java.net.URL;
    import java.util.ResourceBundle;
    import javafx.application.Platform;
    import javafx.beans.property.ListProperty;
    import javafx.beans.property.SimpleListProperty;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.fxml.FXML;
    import javafx.fxml.Initializable;
    import javafx.scene.control.ComboBox;
    import javafx.scene.control.TableColumn;
    import javafx.scene.control.TableView;
    import javafx.scene.control.TextField;
    import javafx.stage.Stage;
     
     
     
     
    public class SampleController implements Initializable {
     
    	private Stage stage;
     
    	@FXML
    	protected ComboBox<Personnes> listPeronnes;
    	@FXML
    	protected TableView personnes;
     
    	@FXML
    	protected TableColumn column;
     
    	@FXML
    	protected TextField numero;
    	ObservableList<Personnes> liste = 
        FXCollections.observableArrayList(new Personnes("personne 1", 1),new Personnes("Personne 2",2));
    	protected ListProperty<Personnes> prs=new SimpleListProperty<>(FXCollections.<Personnes>observableArrayList());
     
     
     
    	@FXML
    	protected void handleAdd()
    	{
    		prs.add(listPeronnes.getSelectionModel().getSelectedItem());
    		personnes.getItems().setAll(prs);
    	}
    	@Override
    	public void initialize(URL url, ResourceBundle rb) {
    		listPeronnes.getItems().setAll(liste);
    	}	
    }
    Personnes.java

    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
    public class Personnes {
     
     
    	private StringProperty nom = new SimpleStringProperty();
    	private IntegerProperty numero = new SimpleIntegerProperty();
     
    	public StringProperty nomProperty() {
    		return nom;
    	}
     
     
    	public Personnes(String nom,int num)
    	{
    		this.nom.set(nom);
    		this.numero.set(num);
    	}
    	public IntegerProperty numeroProperty() {
    		return numero;
    	}
     
    	public String getNom() {
    		return nom.get();
    	}
     
    	public Integer getNumero() {
    		return numero.get();
    	}	
    	@Override
    	public String toString()
    	{
    		return this.nom.get();
    	}	
    }
    Merci à vous tous

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    Vu que tu n'as pas défini de CellRenderer, c'est la méthode toString() de ta classe Personnes qui est appelée pour afficher les instances dans la table.

    Or cette méthode est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Override
    public String toString()
    {
      return this.nom.get() ;
    }
    Donc y a que des personnes avec des noms qui peuvent s'afficher, celles avec des numéros sont là mais ne s'affichent pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Override
    public String toString()
    {
      return (this.nom.get() != null) ? this.nom.get() : this.numero.get();
    }
    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 averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Par défaut
    Citation Envoyé par bouye Voir le message
    Vu que tu n'as pas défini de CellRenderer, c'est la méthode toString() de ta classe Personnes qui est appelée pour afficher les instances dans la table.

    Or cette méthode est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Override
    public String toString()
    {
      return this.nom.get() ;
    }
    Donc y a que des personnes avec des noms qui peuvent s'afficher, celles avec des numéros sont là mais ne s'affichent pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Override
    public String toString()
    {
      return (this.nom.get() != null) ? this.nom.get() : this.numero.get();
    }

    Merci bouye pour ta réponse
    donc j'ai essayé ce que t'as dis, mais ça marche pas non plus..au fait ce que je cherche à faire c'est, quand l'utilisateur lance l'application au lieu de choisir une personne dans la combbox , il saisit un numéro dans le TextField, je récupère ce numéro du textField et je l'insère dans TableView, ensuite si 'il veut ajouter une deuxième personne mais cette fois ci par la liste déroulante, il choisit la personne dans la combobox, clique sur ajouter => ajoute le nom de la personne dans tableView au dessous du premier numéro déjà insérer
    donc dans ma fonction il faut recuperer ce que l'utilisateur saisit dans textfield et l'ajoute dans Table view
    quelque chose qui ressemble à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @FXML
    protected void handleAdd()
    {
       prs.add(numero.getText());//prs est une ListProperty<String> prs=new ...
    	if(listPeronnes.getSelectionModel().getSelectedItem()!=null)
            prs.add(listPeronnes.getSelectionModel().getSelectedItem().getNom());
    		personnes.getItems().setAll(prs);
    	}
    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    Ben je ne vois pas trop ce qui cloche alors, tu as bien vérifié dans le déboggeur que la méthode handleAdd() est appelée et que les nouvelles instances de Personnes sont bien ajoutées dans la table en vérifiant la liste retournée par getItems() ?
    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

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Par défaut
    J'arrive à insérer, mais je ne vois rien sur la tableView rien n'est affiché dans la colonne, je pense que c'est dû au cellFactory que j'ai dans mon fxml
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <cellValueFactory>
    <PropertyValueFactory property="nom" />
    </cellValueFactory>

    et quand je change la liste prs en <String> j'arrive plus a voir les nom des personnes choisit dans la combobox ça marche seulement avec prs<Personnes> et dans ce cas là je ne pourrai pas insérer ce que j'ai saisis dans mon Textfield vu que c'est une chaine de caractère

    Je vois pas du tout quoi faire

    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    Ah vi, flûte je n'avais pas lu que le cell factory était en fait déclaré dans le FXML. Ben oui donc la valeur affichée est celle du nom qui est bien sur null dans ce cas. Essaie de commenter ces lignes dans le FXML et de voir si toString() est utilisé à la place. Il faudra probablement passer un cell factory plus complexe dans le code qui affiche la bonne valeur quand l'autre est null, une simple déclaration FXML ne suffira pas ici puisqu'on doit gérer deux propriété.
    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

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Par défaut
    Citation Envoyé par bouye Voir le message
    Ah vi, flûte je n'avais pas lu que le cell factory était en fait déclaré dans le FXML. Ben oui donc la valeur affichée est celle du nom qui est bien sur null dans ce cas. Essaie de commenter ces lignes dans le FXML et de voir si toString() est utilisé à la place. Il faudra probablement passer un cell factory plus complexe dans le code qui affiche la bonne valeur quand l'autre est null, une simple déclaration FXML ne suffira pas ici puisqu'on doit gérer deux propriété.
    J'ai supprimer le cell factory..ça marche pas du tout, il l'insère mais je ne vois rien

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    Bon, je vais tester ça plus en détail demain durant la pause café.
    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

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    Mouai vu qu'il était près de minuit hier soir j'ai pas fait gaffe qu'il s'agissait du cell value factory plutot que du cell factory (z'auraient pu faire l'effort de faire des noms un peu plus distincts ).
    Également, j'oublie toujours que la TableView est un poil plus complexe que ListView ou ComboBox et donc que just surcharger toString() n'est pas suffisant. Désolé pour ces fausses pistes.

    Donc, après bidouillage, voici un exemple fonctionnel :

    Code XML : 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
     
    <SplitPane dividerPositions="0.3002754820936639" focusTraversable="true" prefHeight="160.0" prefWidth="200.0" AnchorPane.topAnchor="0" AnchorPane.leftAnchor="0" AnchorPane.bottomAnchor="0" AnchorPane.rightAnchor="0">
                <items>
                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
                        <children>
                            <TableView fx:id="personnes" minWidth="0.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                                <columns>
                                    <TableColumn prefWidth="200.0" text="Peronnes" fx:id="column">
    <!--                                <cellValueFactory>
                                            <PropertyValueFactory property="nom" />
                                        </cellValueFactory>-->
                                    </TableColumn>
                                </columns>
                            </TableView>
                        </children>
                    </AnchorPane>
                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
                        <children>
                            <ComboBox fx:id="listPeronnes"  layoutX="25.0" layoutY="40.0" prefWidth="148.0">
                            </ComboBox>
                            <TextField fx:id="numero" layoutX="25.0" layoutY="95.0" prefWidth="149.0" />
                            <Label layoutX="25.0" layoutY="78.0" prefWidth="66.0" text="numero" fx:id="numeroLabel" />
                            <Label layoutX="25.0" layoutY="14.0" prefWidth="66.0" text="Personnes" />
                            <Button onAction="#handleAdd"  layoutX="25.0" layoutY="121.0" mnemonicParsing="false" text="Ajouter" />
                        </children>
                    </AnchorPane>
                </items>
            </SplitPane>

    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
     
    public class Personnes {
     
        private StringProperty nom = new SimpleStringProperty();
        private IntegerProperty numero = new SimpleIntegerProperty();
     
        public StringProperty nomProperty() {
            return nom;
        }
     
        public Personnes(String nom, int num) {
            this.nom.set(nom);
            this.numero.set(num);
        }
     
        public IntegerProperty numeroProperty() {
            return numero;
        }
     
        public String getNom() {
            return nom.get();
        }
     
        public Integer getNumero() {
            return numero.get();
        }
     
        @Override
        public String toString() {
            return this.nom.get();
        }
     
        @Override
        public boolean equals(Object obj) {
            boolean result = false;
            if (obj instanceof Personnes) {
                Personnes p = (Personnes) obj;
                result = ((nom.get() == null && p.nom.get() == null) || nom.get().equals(p.nom.get())) && (numero.get() == p.numero.get());
            }
            return result;
        }
     
        @Override
        public int hashCode() {
            int hash = 7;
            hash = 29 * hash + Objects.hashCode(this.nom.get());
            hash = 29 * hash + Objects.hashCode(this.numero.get());
            return hash;
        }
    }
    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
    public class SampleController implements Initializable {
     
        @FXML
        protected ComboBox<Personnes> listPeronnes;
        @FXML
        protected TableView<Personnes> personnes;
        @FXML
        protected TableColumn<Personnes, String> column;
        @FXML
        protected TextField numero;
        @FXML
        protected Label numeroLabel;
        protected ListProperty<Personnes> prs = new SimpleListProperty<>(FXCollections.<Personnes>observableArrayList());
     
        @Override
        public void initialize(URL url, ResourceBundle rb) {
            personnes.itemsProperty().bind(prs);
            column.setCellValueFactory(new Callback<CellDataFeatures<Personnes, String>, ObservableValue<String>>() {
                @Override
                public ObservableValue<String> call(CellDataFeatures<Personnes, String> value) {
                    Personnes p = value.getValue();
                    String result = (p.getNom() == null) ? String.valueOf(p.getNumero()) : p.getNom();
                    return new SimpleStringProperty(result);
                }
            });
            //
            numero.editableProperty().bind(listPeronnes.getSelectionModel().selectedItemProperty().isNull());
            numeroLabel.disableProperty().bind(numero.editableProperty().not());
            // Load test set.
            List<Personnes> test1 = Arrays.asList(new Personnes("personne 1", 1), new Personnes("Personne 2", 2));
            prs.setAll(test1);
            List<Personnes> test2 = Arrays.asList(null, new Personnes("personne 3", 3), new Personnes("Personne 4", 4));
            listPeronnes.getItems().setAll(test2);
        }
     
        @FXML
        private void handleAdd(ActionEvent event) {
            Personnes p = listPeronnes.getSelectionModel().getSelectedItem();
            if (p != null) {
                if (!prs.contains(p)) {
                    prs.add(p);
                }
            } else {
                try {
                    int telephone = Integer.parseInt(numero.getText());
                    p = new Personnes(null, telephone);
                    prs.add(p);
                } catch (NumberFormatException nfe) {
                    nfe.printStackTrace();
                }
            }
        }
    }
    D'ou vient PropertyValueFactory ? DataFX ? JavaFX 8 ? Un factory maison ?
    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 averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Par défaut
    Citation Envoyé par bouye Voir le message
    Mouai vu qu'il était près de minuit hier soir j'ai pas fait gaffe qu'il s'agissait du cell value factory plutot que du cell factory (z'auraient pu faire l'effort de faire des noms un peu plus distincts ).
    Également, j'oublie toujours que la TableView est un poil plus complexe que ListView ou ComboBox et donc que just surcharger toString() n'est pas suffisant. Désolé pour ces fausses pistes.

    Donc, après bidouillage, voici un exemple fonctionnel :

    Code XML : 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
     
    <SplitPane dividerPositions="0.3002754820936639" focusTraversable="true" prefHeight="160.0" prefWidth="200.0" AnchorPane.topAnchor="0" AnchorPane.leftAnchor="0" AnchorPane.bottomAnchor="0" AnchorPane.rightAnchor="0">
                <items>
                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
                        <children>
                            <TableView fx:id="personnes" minWidth="0.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                                <columns>
                                    <TableColumn prefWidth="200.0" text="Peronnes" fx:id="column">
    <!--                                <cellValueFactory>
                                            <PropertyValueFactory property="nom" />
                                        </cellValueFactory>-->
                                    </TableColumn>
                                </columns>
                            </TableView>
                        </children>
                    </AnchorPane>
                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
                        <children>
                            <ComboBox fx:id="listPeronnes"  layoutX="25.0" layoutY="40.0" prefWidth="148.0">
                            </ComboBox>
                            <TextField fx:id="numero" layoutX="25.0" layoutY="95.0" prefWidth="149.0" />
                            <Label layoutX="25.0" layoutY="78.0" prefWidth="66.0" text="numero" fx:id="numeroLabel" />
                            <Label layoutX="25.0" layoutY="14.0" prefWidth="66.0" text="Personnes" />
                            <Button onAction="#handleAdd"  layoutX="25.0" layoutY="121.0" mnemonicParsing="false" text="Ajouter" />
                        </children>
                    </AnchorPane>
                </items>
            </SplitPane>

    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
     
    public class Personnes {
     
        private StringProperty nom = new SimpleStringProperty();
        private IntegerProperty numero = new SimpleIntegerProperty();
     
        public StringProperty nomProperty() {
            return nom;
        }
     
        public Personnes(String nom, int num) {
            this.nom.set(nom);
            this.numero.set(num);
        }
     
        public IntegerProperty numeroProperty() {
            return numero;
        }
     
        public String getNom() {
            return nom.get();
        }
     
        public Integer getNumero() {
            return numero.get();
        }
     
        @Override
        public String toString() {
            return this.nom.get();
        }
     
        @Override
        public boolean equals(Object obj) {
            boolean result = false;
            if (obj instanceof Personnes) {
                Personnes p = (Personnes) obj;
                result = ((nom.get() == null && p.nom.get() == null) || nom.get().equals(p.nom.get())) && (numero.get() == p.numero.get());
            }
            return result;
        }
     
        @Override
        public int hashCode() {
            int hash = 7;
            hash = 29 * hash + Objects.hashCode(this.nom.get());
            hash = 29 * hash + Objects.hashCode(this.numero.get());
            return hash;
        }
    }
    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
    public class SampleController implements Initializable {
     
        @FXML
        protected ComboBox<Personnes> listPeronnes;
        @FXML
        protected TableView<Personnes> personnes;
        @FXML
        protected TableColumn<Personnes, String> column;
        @FXML
        protected TextField numero;
        @FXML
        protected Label numeroLabel;
        protected ListProperty<Personnes> prs = new SimpleListProperty<>(FXCollections.<Personnes>observableArrayList());
     
        @Override
        public void initialize(URL url, ResourceBundle rb) {
            personnes.itemsProperty().bind(prs);
            column.setCellValueFactory(new Callback<CellDataFeatures<Personnes, String>, ObservableValue<String>>() {
                @Override
                public ObservableValue<String> call(CellDataFeatures<Personnes, String> value) {
                    Personnes p = value.getValue();
                    String result = (p.getNom() == null) ? String.valueOf(p.getNumero()) : p.getNom();
                    return new SimpleStringProperty(result);
                }
            });
            //
            numero.editableProperty().bind(listPeronnes.getSelectionModel().selectedItemProperty().isNull());
            numeroLabel.disableProperty().bind(numero.editableProperty().not());
            // Load test set.
            List<Personnes> test1 = Arrays.asList(new Personnes("personne 1", 1), new Personnes("Personne 2", 2));
            prs.setAll(test1);
            List<Personnes> test2 = Arrays.asList(null, new Personnes("personne 3", 3), new Personnes("Personne 4", 4));
            listPeronnes.getItems().setAll(test2);
        }
     
        @FXML
        private void handleAdd(ActionEvent event) {
            Personnes p = listPeronnes.getSelectionModel().getSelectedItem();
            if (p != null) {
                if (!prs.contains(p)) {
                    prs.add(p);
                }
            } else {
                try {
                    int telephone = Integer.parseInt(numero.getText());
                    p = new Personnes(null, telephone);
                    prs.add(p);
                } catch (NumberFormatException nfe) {
                    nfe.printStackTrace();
                }
            }
        }
    }
    D'ou vient PropertyValueFactory ? DataFX ? JavaFX 8 ? Un factory maison ?
    Enfin ça marche..Merci beaucoup bouye
    InfoStd

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/10/2014, 10h15
  2. Réponses: 1
    Dernier message: 14/06/2011, 18h02
  3. Réponses: 11
    Dernier message: 06/05/2011, 22h55
  4. [AC-2007] Deux champs différents dans une même colonne
    Par Prettyletter dans le forum IHM
    Réponses: 10
    Dernier message: 23/04/2011, 23h16
  5. [BO XI] Variable différente dans une même colonne
    Par FloLens dans le forum Deski
    Réponses: 6
    Dernier message: 16/04/2008, 16h36

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