Programme avec combobox

Fermé
miky1111 Messages postés 1 Date d'inscription mardi 10 avril 2018 Statut Membre Dernière intervention 10 avril 2018 - Modifié le 10 avril 2018 à 13:07
 miky1111 - 18 avril 2018 à 06:47
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

CCMHR41 Messages postés 124 Date d'inscription lundi 9 avril 2018 Statut Membre Dernière intervention 14 avril 2018 83
10 avril 2018 à 01:06
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
bien recu merci
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
10 avril 2018 à 13:07
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