Programme avec combobox

miky1111 Messages postés 2 Statut Membre -  
 miky1111 -
bonsoir a tous !!!
je suis novice en programmation java; j'ai ecris un petit programme javafx avec une combobox et des evenements liés aux differents items de la combobox mais j'ai une erreur...
voici le code
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package inscription;

import java.util.List;
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;

/**
 *
 * @author samba
 */
public class Inscription extends Application {
   
     @Override
     public void start(Stage fenetre){
        fenetre.show();
        fenetre.setTitle("Inscription");
        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setPadding(new Insets(25,25,25,25));
        grid.setHgap(10);
        grid.setVgap(10);
        Scene sc = new Scene(grid,500,400);
        sc.getStylesheets().add(Inscription.class.getResource("style.css").toExternalForm());
        
        Text title = new Text("Calcul Montant");
        
        title.setFont(Font.font("Tahoma",FontWeight.BOLD,30));
        
        grid.add(title,0,0,2,1);
        
       // matricule
        Label matricule = new Label("Matricule");
        grid.add(matricule, 0, 1);
        TextField matfield = new TextField();
        grid.add(matfield, 1, 1);
        matfield.setPromptText("entrer le matricule");
        
        //nom
        Label nom = new Label("Nom");
        grid.add(nom, 0,2 );
        TextField nomfield = new TextField();
        grid.add(nomfield, 1, 2);
        nomfield.setPromptText("entrer le nom");
        
        //prenom
        Label prenom = new Label("Prenom");
        grid.add(prenom, 0, 3);
        TextField prenomfield = new TextField("");
        grid.add(prenomfield, 1, 3);
        prenomfield.setPromptText("entrer le prenom");
        
        //filiere
        Label fil = new Label("Filiere");
        grid.add(fil, 0, 4);
        ComboBox <String> filiere = new ComboBox();
        filiere.setEditable(true);
        //ajouter du contenu a la comboBox
        
        filiere.getItems().setAll("Gestion","Informatique","Sante","Education","Theologie");
       //recuperer la valeur selectionnée dans la comboBox
        String result = filiere.getSelectionModel().selectedItemProperty().getValue();
        //
        grid.add(filiere,1,4);
        
         Label qte = new Label("Montant payé");
        grid.add(qte, 0, 5);
        TextField qtefield = new TextField("");
        grid.add(qtefield, 1, 5);
        qtefield.setPromptText("entrer le montant versé");
        
        //creation d'un label et d'un champ texte pour entrer le prix   
       
        Button btn = new Button("Valider");
        grid.add(btn, 1, 6);
        
         Text netapayer = new Text("Montant Restant a payer:");
         netapayer.setId("result");
         grid.add(netapayer, 0, 7);
          
         
        fenetre.setScene(sc);
        fenetre.show();
        
        btn.setDefaultButton(true);
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
            double qte = Double.parseDouble(qtefield.getText());
            double montant= 0;
           
            switch(result){
                case "Gestion":montant=900000.0 - qte;
                break;
                case "Informatique":montant = 1000000.0 - qte;
                break;
                case "Theologie": montant = 500000.0 - qte;
                break;
                case "Sante": montant = 1500000.0 - qte;
                break;
                default:break;
                    
             }
             netapayer.setText("Net à payer = " + " " + montant);
            }
        });
              
     }
    public static void main(String[] args) {
        launch(args);
    }
    
}

2 réponses

  1. CCMHR41 Messages postés 141 Statut Membre 83
     
    Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
    at inscription.Inscription$1.handle(Inscription.java:115)
    at inscription.Inscription$1.handle(Inscription.java:109)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238).....

    (ton erreur)

    Evite de faire 2 sujet pour le même probleme :p

    Cordialement
    0
    1. miky1111
       
      bien recu merci
      0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Il faut faire la correspondance entre le message d'erreur et le code qui correspond.

    Exception in thread "JavaFX Application Thread" java.lang.NullPointerException 
    at inscription.Inscription$1.handle(Inscription.java:115)

    La ligne 115 c'est
    switch (result){
    le problème c'est donc que result = null.

    Cela s'explique par ton
    String result = filiere.getSelectionModel().selectedItemProperty().getValue();
    qui est fait à l'initialisation de la fenêtre, alors qu'il n'y a encore aucun élément choisi...

    Il vaudrait mieux faire ton selectedItemProperty() au moment où tu cliques sur le bouton.

    btn.setOnAction(event -> {
        double qteValue = Double.parseDouble(qtefield.getText());
        double montant = 0;
    
        // recuperer la valeur selectionnée dans la comboBox
        String result = filiere.getSelectionModel().selectedItemProperty().getValue();
    
        switch (result) {
        case "Gestion":
            montant = 900000.0 - qteValue;
            break;
        case "Informatique":
            montant = 1000000.0 - qteValue;
            break;
        case "Theologie":
            montant = 500000.0 - qteValue;
            break;
        case "Sante":
            montant = 1500000.0 - qteValue;
            break;
        default:
            break;
        }
        netapayer.setText("Net à payer = " + montant);
    });
    0