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 :

Remplir un TableView


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2018
    Messages : 5
    Par défaut Remplir un TableView
    Bonjour,

    Je suis en train de creer un logiciel et pratiquant javaFx que depuis quelques jours je suis confronté a un probleme.
    J'ai donc creer un programme tres minimaliste qui isole mon probléme.
    Fonctionnement du logiciel :

    J'ai un ComboBox qui me permet de choisir un type d'huile (seule la 1ere huile est codée dans l exemple).
    Quand j'ai choisi le type d'huile, une fenetre s'ouvre et me demande la quantité que je veux ajouter.

    Mon probleme est le suivant :

    Quand j ai saisi la quantité d'huile et que je clic sur le bouton "Ajouter l'huile" j'aimerai que la quantité que je viens de rentrer s'affiche dans la colonne "Pourcentage" de mon TableView.

    Nom : 1.jpg
Affichages : 2110
Taille : 26,0 Ko

    Nom : 2.jpg
Affichages : 2138
Taille : 51,5 Ko

    Le projet contient 2 classe, "TestDriver" et la classe "Huile" qui contient entre autre une variable "quantiteEnGrammes".

    Dans la classe TestDriver je commence par créer le ComboBox, ensuite je créer le TableView avec ses 2 colonnes, puis je gére les clics de souris sur les boutons.

    Admettons que je choisisse "Huile de ricin", puis je clic sur le bouton "OK".
    Une fenetre s ouvre et je rentre 50.
    Cette valeur est affectée a la variable "quantiteEnGrammes" de mon objet Huile (h).

    Maintenant dans la fonction qui gére le clic sur le bouton "Ajouter l'huile" j 'aimerais qu au clic le TableView se remplisse de la valeur 50. (celle que j ai précédemment rentrée).

    J ai lu plusieurs tuto mais je n en trouve pas en francais sur le sujet.

    Merci de votre aide.

    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
    94
     
    public class Main extends Application
    {
    	public static void remplirTableView(BorderPane root)
    	{
    		VBox vBoxCaracteristiques = new VBox();
    		Button boutonAjouter = new Button("Ajouter l'huile");
     
     
     
    		/**************Création du ComboBox pour choisir les huiles******************/
     
    		HBox hBoxHuiles = new HBox();
    		Label labelType = new Label("Huiles :");
    		Button boutonOk = new Button("OK");
     
    		ComboBox<String> comboBoxHuiles = new ComboBox<>();
    		comboBoxHuiles.getItems().setAll(
    				"Huile de ricin",
    				"Huile d'argan",
    				"Huile d'avocat"
    				);
    		comboBoxHuiles.setPromptText("Choisissez vos huiles");
    		hBoxHuiles.getChildren().addAll(labelType, comboBoxHuiles, boutonOk);
     
    		/***********************************************************************/
     
     
     
    		/**************Création du TableView avec ses colonnes******************/
     
    		TableView<Huile> tableView = new TableView();
     
    		TableColumn<Huile, String> huile = new TableColumn<>("Huile");
    		TableColumn<Huile, Double> quantiteHuile = new TableColumn<>("Pourcentage");
     
    		tableView.getColumns().setAll(huile, quantiteHuile);
    		vBoxCaracteristiques.getChildren().addAll(hBoxHuiles, tableView, boutonAjouter);
     
    		/***********************************************************************/
     
     
     
    		/**************Gestion des clics sur les boutons******************/
     
    		boutonOk.setOnMouseClicked(e1 ->
    		{
    			Optional<String> textIn = null;
     
    			String nom = comboBoxHuiles.getValue();
     
    			if (!comboBoxHuiles.getValue().equals("null"))
    			{
    				if (nom.equals("Huile de ricin"))
    				{
    					TextInputDialog dialog = new TextInputDialog(null);
    					Huile h = new Huile();
    					dialog.setHeaderText("Quelle proportion d'huile de ricin voulez vous mettre dans votre préparation. (%)");
     
    			        Optional<String> result = dialog.showAndWait();
    			        h.quantiteEnGrammes = Double.parseDouble(result.get());
     
    			        boutonAjouter.setOnMouseClicked(e2 ->
    					{
    						// je voudrais qu ici la valeur saisie précédemment s ajoute dans le tableView dans la colonne "pourcentage"
    						System.out.println("Clic sur le bouton ajouter l'huile");
    					});
    				}
    		    }
     
     
    		});
     
    		/***********************************************************************/
     
    		root.setLeft(vBoxCaracteristiques);
    	}
     
     
     
     
    	@Override
    	public void start(Stage primaryStage) {
    		BorderPane root = new BorderPane();
    		Scene scene = new Scene(root, 400, 400);
    		remplirTableView(root);
    		primaryStage.setScene(scene);
    		primaryStage.show();
    	}
     
    	public static void main(String[] args) {
    		launch(args);
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class Huile
    {
    	public double coefficientSaponification = 0;
    	public double quantiteEnGrammes = 0;
     
    	public Huile()
    	{
     
    	}
    }[ATTACH]404933[/ATTACH][ATTACH]404936[/ATTACH]

  2. #2
    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 te manque pour chaque colonne une cellValueFactory (ne pas confondre avec une cellFactory) qui permet de sortie une vue de l'objet Huile pour afficher la bonne valeur dans chaque colonne de la table (donc ici le coeff et la quantité). Par contre ton objet Huile est simpliste et ses valeurs en sont pas observables, ce qui fait que ta table ne sera pas capable de se mettre à jour toute seule pour afficher les nouvelles valeurs si elles sont modifiées en dehors dans la boite de dialogue.

    Voir aussi Tutoriel sur l'API Cell de JavaFX #TableView
    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 à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2018
    Messages : 5
    Par défaut
    Bonjour,

    J ai rajouter les setCellValueFactory mais ca fonctionne toujours pas, peut etre que je l'utilise mal ?

    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
                    TableView<Huile> tableView = new TableView();
    		tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    		
    		TableColumn<Huile, String> huile = new TableColumn<>("Huile");
    		huile.setCellValueFactory(new PropertyValueFactory<>("nomHuile"));
    		
    		TableColumn<Huile, Double> quantiteHuile = new TableColumn<>("Pourcentage");
    		huile.setCellValueFactory(new PropertyValueFactory<>("quantiteEnGrammes"));
    		
    		tableView.getColumns().setAll(huile, quantiteHuile);
    
    
    /**************Gestion des clics sur les boutons******************/
    		
    		boutonOk.setOnMouseClicked(e1 ->
    		{
    			Optional<String> textIn = null;
    			
    			String nom = comboBoxHuiles.getValue();
    			
    			if (!comboBoxHuiles.getValue().equals("null"))
    			{
    				if (nom.equals("Huile de ricin"))
    				{
    					TextInputDialog dialog = new TextInputDialog(null);
    					Huile h = new Huile();
    					dialog.setHeaderText("Quelle proportion d'huile de ricin voulez vous mettre dans votre préparation. (%)");
    			 
    			        Optional<String> result = dialog.showAndWait();
    			        h.quantiteEnGrammes = Double.parseDouble(result.get());
    			        
    			        boutonAjouter.setOnMouseClicked(e2 ->
    					{
    						// je voudrais qu ici la valeur saisie précédemment s ajoute dans le tableView dans la colonne "pourcentage"
    						System.out.println("Clic sur le bouton ajouter l'huile");
    						System.out.println(h.quantiteEnGrammes);
    						
    						tableView.getItems().add(h);
    					});
    				}
    		    }
    		});

  4. #4
    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
    Justement, tu n'as pas de propriétés ou d'accesseurs pour ces 2 valeurs dans ta classe Huile
    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 à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2018
    Messages : 5
    Par défaut
    merci ça fonctionne.
    je viens de comprendre le mécanisme, il faut donc obligatoirement des getters pour pouvoir remplir.

    A la fin de chaque ligne j ai rajouter un bouton "Supprimer" au cas ou l utilisateur veuille supprimer une huile, comment je dois faire pour supprimer une ligne ?

    Merci.

    Nom : 1.jpg
Affichages : 2124
Taille : 42,1 Ko

  6. #6
    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
    Oui c'est le principe d'une propriete. Attention cependant en l'etat (juste avec un getter) la propriété n'est pas modifiable. Il faut donc un setter pour la rendre éditable. Mais même alors elle n'est pas observable (il faut soit supporter les propriétés JavaFX, soit le support standard complet JavaBeans, c'est a dire avec la possibilité d'enregistrer un ChangePropertyListener sur la propriété) ce qui pourrait te causer des soucis ultérieurement si tu décides de changer les valeurs hors de la table (car alors la table ne se mettra pas a jour).

    Il te suffit de retirer l'objet Huile en question de la liste items de la TableView. Je ne sais pas comment est codé la création de ton bouton ou de son action, mais il est possible de récupérer la valeur actuelle (Huile) sur la ligne du bouton en accédant a la TableCell ou a la TableRow
    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

Discussions similaires

  1. remplir une TableView depuis le base de données
    Par Hind4Dev dans le forum JavaFX
    Réponses: 13
    Dernier message: 28/03/2017, 15h11
  2. Réponses: 9
    Dernier message: 19/09/2016, 12h07
  3. Réponses: 2
    Dernier message: 11/03/2009, 16h54
  4. Remplir les colonnes dans un TableViewer dynamiquement
    Par gargantua dans le forum Eclipse Platform
    Réponses: 13
    Dernier message: 07/11/2007, 21h13
  5. [RCP] Remplir un TableViewer d'une Vue depuis une Action
    Par DarkHope dans le forum Eclipse Platform
    Réponses: 16
    Dernier message: 26/06/2006, 15h06

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