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 :

Récupération d'une valeur ComboBox


Sujet :

JavaFX

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2020
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Récupération d'une valeur ComboBox
    Bonjour à tous,

    J'ai un problème dans la récupération de mes valeurs de ma ComboBox. Je souhaite remplir mon ComboBox grâce à une table SQL dans ma BDD. Je remplis donc ma ComboBox de cette manière :
    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
    ObservableList<DaoIdRole> listSection = FXCollections.observableArrayList();
            ObservableList<DaoIdMateriel> listMateriel = FXCollections.observableArrayList();
     
            try {
                Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/le_pigeonnier", "root", "root");
                ResultSet resultSection = connection.createStatement().executeQuery("SELECT idSection FROM section");
                ResultSet resultMateriel = connection.createStatement().executeQuery("SELECT idMateriel FROM materiel");
     
                while(resultSection.next()){
                    listSection.add(new DaoIdRole(resultSection.getString("idSection")));
                }
                while(resultMateriel.next()){
                    listMateriel.add(new DaoIdMateriel(resultMateriel.getString("idMateriel")));
                }
                comboBoxSection.setItems(listSection);
                comboBoxMateriel.setItems(listMateriel);
    J'ai eu un premier problème, l'affichage dans ma ComboBox se faisait de cette manière : "eu.hautil.pigeonnier.DaoIdMateriel@328372sq". J'ai régler ce problème en implémentant la méthode toString () grâce à ce forum (et merci d'ailleurs ).
    Ensuite j'ai bien réussi à récupérer mes valeurs de ma ComboBox avec les champs de ma table SQL. Cependant, lorsque je valide mes données, j'obtiens cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cannot add or update a child row: a foreign key constraint fails (`le_pigeonnier`.`tig`, CONSTRAINT `tig_ibfk_2` FOREIGN KEY (`idMateriel`) REFERENCES `materiel` (`idMateriel`))
    J'ai donc supprimé mes deux clés étrangères dans ma table afin de voir si mon formulaire s'intégrait bien dans la BDD et, en effet, il s'intègre bien dans la BDD. Cependant, les valeurs récupérer sont égale à "0".

    Nom : Screenshot_1.png
Affichages : 57
Taille : 13,5 Ko

    Ici on voit bien que, dans la logique, je dois récupérer "4" pour le ComboBox "section" et "7" pour le ComboBox "materiel". Et les valeurs insérer dans ma BDD sont celles-ci :

    Nom : Screenshot_2.png
Affichages : 51
Taille : 8,6 Ko

    Je ne comprends pas pourquoi les valeurs récupérées sont ces dernières. Je vous mets mon code ci-dessous :

    DBUTILS.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
    public static void enregistrerTig(ActionEvent event, String nomTig, int idSection, int idMateriel) throws SQLException {
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/le_pigeonnier", "root", "root");
            PreparedStatement preparedStatement = conn.prepareStatement("INSERT INTO tig(nomTig, idSection, idMateriel) VALUES(?, ?, ?)");
     
            preparedStatement.setString(1, nomTig);
            preparedStatement.setInt(2, idSection);
            preparedStatement.setInt(3, idMateriel);
     
            int resultInsert = preparedStatement.executeUpdate();
     
            if (resultInsert != 0) {
                System.out.println("TIG bien ajouté !");
                Alert alert = new Alert(Alert.AlertType.INFORMATION);
                alert.setTitle("Ajout confirmé");
                alert.setHeaderText("Confirmation");
                alert.setContentText("Le TIG a bien été ajouté.");
                alert.show();
                changeScene(event, "/fxml/menu.fxml", "Menu Gestion | McPigeon", "");
            } else {
                System.out.println("Une erreur est survenue, le TIG n'a pas pu être ajouté");
                Alert alert = new Alert(Alert.AlertType.ERROR);
                alert.setTitle("Erreur");
                alert.setHeaderText("Erreur d'insertion");
                alert.setContentText("L'insertion a échouée', veuillez réessayer.");
                alert.show();
                changeScene(event, "/fxml/enregistrer_tig.fxml", "Enregistrer un TIG | McPigeon", "");
            }
        }
    EnregistrerTigController.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
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    package eu.hautil.pigeonnier.tig;
     
    import eu.hautil.pigeonnier.DBUtils;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.fxml.FXML;
    import javafx.fxml.Initializable;
    import javafx.scene.control.Alert;
    import javafx.scene.control.Button;
    import javafx.scene.control.ComboBox;
    import javafx.scene.control.TextField;
     
    import java.net.URL;
    import java.sql.*;
    import java.util.ResourceBundle;
     
    public class EnregistrerTigController implements Initializable {
     
        @FXML
        ComboBox<DaoIdRole> comboBoxSection;
     
        @FXML
        ComboBox<DaoIdMateriel> comboBoxMateriel;
     
        @FXML
        private TextField nomTIG;
     
        @FXML
        private Button submitButton;
     
        @FXML
        private Button backButton;
     
        @Override
        public void initialize(URL url, ResourceBundle resourceBundle) {
     
            ObservableList<DaoIdRole> listSection = FXCollections.observableArrayList();
            ObservableList<DaoIdMateriel> listMateriel = FXCollections.observableArrayList();
     
            try {
                Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/le_pigeonnier", "root", "root");
                ResultSet resultSection = connection.createStatement().executeQuery("SELECT idSection FROM section");
                ResultSet resultMateriel = connection.createStatement().executeQuery("SELECT idMateriel FROM materiel");
     
                while(resultSection.next()){
                    listSection.add(new DaoIdRole(resultSection.getString("idSection")));
                }
                while(resultMateriel.next()){
                    listMateriel.add(new DaoIdMateriel(resultMateriel.getString("idMateriel")));
                }
                comboBoxSection.setItems(listSection);
                comboBoxMateriel.setItems(listMateriel);
     
            } catch (SQLException e) {
                e.printStackTrace();
            }
            boolean isMyComboBoxEmptyIdRole = comboBoxSection.getSelectionModel().isEmpty();
            boolean isMyComboBoxEmptyIdMateriel = comboBoxMateriel.getSelectionModel().isEmpty();
     
     
            submitButton.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    if (isMyComboBoxEmptyIdRole == false || isMyComboBoxEmptyIdMateriel == false || nomTIG.getText().isEmpty()) {
                        System.out.println(comboBoxMateriel + " " + comboBoxSection);
                        Alert alert = new Alert(Alert.AlertType.ERROR);
                        alert.setTitle("Erreur");
                        alert.setHeaderText("Champs manquants");
                        alert.setContentText("Un des champs est vide ou n'est pas rempli, veuillez réessayer.");
                        alert.show();
                        DBUtils.changeScene(event, "/fxml/tig/enregistrer_tig.fxml", "Enregistrer un TIG | McPigeon", "");
                    } else if(comboBoxSection.getItems() == null || comboBoxMateriel.getItems() == null){
                        System.out.println("ComboBox nul");
                    } else {
                        try {
                            DBUtils.enregistrerTig(event, nomTIG.getText(), DBUtils.stringToInt(comboBoxSection.getItems().toString()), DBUtils.stringToInt(comboBoxMateriel.getItems().toString()));
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });
     
            backButton.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    DBUtils.changeScene(event, "/fxml/tig/gestion_tig.fxml", "Gestion des TIG | McPigeon", "");
                }
            });
        }
    }
    DaoIdMateriel.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
    package eu.hautil.pigeonnier.tig;
     
    public class DaoIdMateriel {
        String idMateriel;
     
        public DaoIdMateriel(String idMateriel) {
            this.idMateriel = idMateriel;
        }
     
        public String getIdMateriel() {
            return idMateriel;
        }
     
        public void setIdMateriel(String idMateriel) {
            this.idMateriel = idMateriel;
        }
     
     
        public String toString(){
            return idMateriel;
        }
    }
    Merci par avance pour vos réponses apportées !!

  2. #2
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    mai 2020
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : mai 2020
    Messages : 246
    Points : 319
    Points
    319
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBUtils.enregistrerTig(event, nomTIG.getText(), DBUtils.stringToInt(comboBoxSection.getItems().toString()), DBUtils.stringToInt(comboBoxMateriel.getItems().toString()));
    Je ne sais pas comment fonctionne DBUtils.stringToInt(String) mais ce qui est étrange c'est vous lui passiez tous les items et pas uniquement celui qui est sélectionné (https://docs.oracle.com/javase/8/jav...tml#getItems--).




    Pour obtenir l'élément sélectionné, il faut utiliser getValue:

    The value of this ComboBox is defined as the selected item if the input is not editable, or if it is editable, the most recent user action: either the value input by the user, or the last selected item.

    -- https://docs.oracle.com/javase/8/jav...tml#getValue--

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2020
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    En effet, une erreur assez bête ! Merci pour cette réponse, cela a réglé le problème !

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

Discussions similaires

  1. [glade] Récupération d'une valeur dans une combo
    Par Poutchjay dans le forum GTK+ avec Python
    Réponses: 1
    Dernier message: 23/01/2006, 14h59
  2. Réponses: 6
    Dernier message: 05/01/2006, 16h37
  3. [XSL] récupération d'une valeur
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 14/12/2005, 15h58
  4. Réponses: 2
    Dernier message: 03/11/2005, 15h03
  5. récupération d'une valeur dans une variable
    Par jh0483 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/08/2005, 09h49

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