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 :

[JavaFX] identifier un bouton


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut [JavaFX] identifier un bouton
    Bonjour,

    je suis en train de développer en javaFX un logiciel qui permet de gérer un parc de véhicules.

    J'ai donc un formulaire qui me permet de renseigner les informations du véhicule et cela s'enregistre dans une base de données.
    Dans le logiciel j'ai créer un onglet "Consulter la flotte de véhicules" qui donne un aperçu des informations pour chaque véhicules,
    avec en bout de ligne un bouton "Détails" qui devra ouvrir une nouvelle fenêtre avec plus de détails sur le véhicule.

    Mon premier problème est que je sais pas comment identifier lors du clic sur le bouton "Détails" quel bouton a été appuyé pour afficher les bonnes informations en fonction du véhicule.
    Le bouton de la première voiture ? la deuxième ? etc...

    Merci de votre aide.

    Nom : 1.png
Affichages : 2273
Taille : 117,7 Ko
    Nom : 2.png
Affichages : 2286
Taille : 104,3 Ko

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 897
    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 897
    Billets dans le blog
    54
    Par défaut
    Les nœuds contiennent une propriété id ainsi qu'une propriété userData ce qui permet de passer des identifiant ou des info permettant de les identifier ou d’exécuter l'action correspondante (similaire a ce que permettent les valeur name et actionCommand en AWT/Swing donc). Il te suffit donc d'interroger la source de enlèvement (accessible via event.getSource()).

    De plus, outre ces deux propriétés, les nœuds disposent d'une map properties qui permet de stocker tout et n'importe quoi dedans (d'autres identifiants, des actions, etc.) avec tes propres clés.
    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 régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut
    Bonjour,
    Merci pour ta réponse.

    J'ai donc fait un println a chaque clic sur le bouton "détails", le println m'affiche bien une référence différente pour chaque bouton.
    Maintenant je ne vois pas comment faire pour afficher les bonnes informations de chaque véhicule a chaque clic sur le bouton détails.
    Je voudrais faire une sorte de comparaison : Si j'appuie sur ce bouton Alors je sais que c est ce véhicule.

    Je sais pas si je me fais bien comprendre ?

    MerciNom : 3.png
Affichages : 2248
Taille : 189,9 Ko

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut
    Je viens de creer une nouvelle classe qui a chaque clic sur le bouton details ouvre une nouvelle fenetre et affiche dans la console le numéro d'immatriculation du vehicule sur lequel j ai cliqué.
    Le probleme c est que ca m affiche toujours l'immatriculation du premier vehicule de la base de données.
    Le premier vehicule a pour immatriculation aa123bb, le deuxieme a pour immatriculation fd541ja, et le troisieme df978tg (voir image du 1er post).
    Comment dois je faire pour que ce soit la bonne immatriculation à chaque fois ?

    Merci de votre aide.

    Nom : 3.png
Affichages : 2231
Taille : 267,3 Ko

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 897
    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 897
    Billets dans le blog
    54
    Par défaut
    Oui mais bon avec une référence tu ne vas pas aller bien loin...

    Et sinon ma réponse au dessus contenait déjà les infos dont tu avais besoin.

    Après on a aucune idée de comment est faite ton UI notamment comment sont créés les boutons dans les cellules de la table et comment tu associes tes véhicules (ou pas) avec ces dits boutons et surtout y a aucun code qu'on peut tester, juste des grosses images non-interactives qui bouffent de la bande passante pour rien car elles n'importent aucune info dont on aurait réellement besoin.

    -> quand on a un soucis, on code un programme simple qui se focalise uniquement sur le problème en question (ex: un écran qui affiche des Toto ou des TrucMuche en utilisant la même méthode que les voiture ici) et ça permet de partager son code a autrui sans publier un truc propriétaire.................. et aussi a l'intervenant de plonger directement au cœur du problème sans devoir tripatouiller le comment du pourquoi de je ne sait quel contexte qu'on ne voit même pas avec ces #$#!@$@#$ d'images.... Parfois ça permet même de trouver la solution tout seul en s’éclaircissant les idées...
    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

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Par défaut
    Bonjour,

    J ai donc créer un programme plus simple qui ne traite que mon problème.
    La classe GUIConsulter génére l'UI de la fenêtre (donc les colonnes Marque, Modèle, Immatriculation et le bouton détails).
    Puis elle remplie les infos directement depuis la base de données. (ici 3 véhicules dans la base de données pour l'exemple).

    Ensuite dans la classe InfoVehicule j'écoute chaque clic sur le bouton détails, et dés qu"il y a un clique la classe GUIDetailsVehicule est appelée.
    Cette classe créer une autre fenêtre avec les détails du véhicule en question.

    Le probleme c"est que quand quand je clique sur le bouton détails du premier véhicule, du deuxième, ou du troisième, c est toujours les infos du premier véhicule qui ressortent et je ne comprend pas pourquoi ?

    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
    package application;
     
    import java.sql.SQLException;
     
    import javafx.application.Application;
    import javafx.stage.Stage;
    import javafx.scene.Scene;
    import javafx.scene.layout.BorderPane;
     
     
    public class Main extends Application
    {
    	public void start(Stage primaryStage) throws SQLException
    	{
    		BorderPane root = new BorderPane();
    		Scene scene = new Scene(root, 800, 600);
     
    		GUIConsulter guiC = new GUIConsulter(root, primaryStage);
     
    		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
    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
    package application;
     
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.scene.control.TableColumn;
    import javafx.scene.control.TableView;
    import javafx.scene.control.cell.PropertyValueFactory;
    import javafx.scene.layout.BorderPane;
    import javafx.stage.Stage;
     
    public class GUIConsulter
    {
    	TableView<InfoVehicule> table;
    	Statement statement = null;
     
    	public GUIConsulter(BorderPane root, Stage primaryStage) throws SQLException
    	{
    		TableColumn<InfoVehicule, String> colonneMarque = new TableColumn<>("Marque");
    		colonneMarque.setCellValueFactory(new PropertyValueFactory<>("marque"));
     
            TableColumn<InfoVehicule, String> colonneModele = new TableColumn<>("Modèle");
            colonneModele.setCellValueFactory(new PropertyValueFactory<>("modele"));
     
            TableColumn<InfoVehicule, String> colonneImmatriculation = new TableColumn<>("Immatriculation");
            colonneImmatriculation.setCellValueFactory(new PropertyValueFactory<>("immatriculation"));
     
            TableColumn colonneBoutonDetails = new TableColumn("");
            colonneBoutonDetails.setCellValueFactory(new PropertyValueFactory<InfoVehicule, String>("boutonDetails"));
     
            table = new TableView<>();
            table.setItems(getVehicule());
    		table.getColumns().addAll(colonneMarque, colonneModele, colonneImmatriculation, colonneBoutonDetails);
     
            root.setCenter(table);
    	}
     
    	public ObservableList<InfoVehicule> getVehicule() throws SQLException
        {
    		table.setTranslateY(10);
     
    		ObservableList<InfoVehicule> vehicules = FXCollections.observableArrayList();
     
        	ConnectionBddSQLite connection = new ConnectionBddSQLite("bddVehicules.db");
            Connection conn = connection.connect();
            ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM vehicules");
     
    		while (rs.next()) 
    		{
    			vehicules.add(new InfoVehicule(rs.getString("marque").toUpperCase(), rs.getString("modele").toUpperCase(),
    					rs.getString("immatriculation").toUpperCase().toUpperCase(), 
    					"Détails " + rs.getString("immatriculation").toUpperCase()));
     
    			System.err.println("Marque          : " + rs.getString("marque"));
    			System.err.println("Modele          : " + rs.getString("modele"));
    			System.err.println("Immatriculation : " + rs.getString("immatriculation"));
    			System.err.println("**************************************************************");
    		}
     
    		connection.disconnect();
    		conn.close();
     
        	return vehicules;
        }
    }
    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
    package application;
     
    import java.sql.SQLException;
     
    import javafx.scene.control.Button;
     
    public class InfoVehicule
    {
    	String marque = null;
    	String modele = null;
    	String immatriculation = null;
    	Button boutonDetails = null;
     
    	public InfoVehicule(String marque, String modele, String immatriculation, String boutonDetails) throws SQLException
    	{
    		this.marque = marque;
    		this.modele = modele;
    		this.immatriculation = immatriculation;
    		this.boutonDetails = new Button(boutonDetails);
     
    		this.boutonDetails.setMinHeight(20);
    		this.boutonDetails.setMinWidth(180);
     
    		this.boutonDetails.setOnMouseClicked(e ->
    		{
    			System.out.println("********************");
    			System.out.println("clic sur bouton details Details");
    			System.out.println(e.getSource());
     
    			GUIDetailsVehicules ficheDetailsVehicule = new GUIDetailsVehicules();
    		});
    	}
     
    	public String getMarque()
    	{
    		return this.marque;
    	}
     
    	public String getModele()
    	{
    		return this.modele;
    	}
     
    	public String getImmatriculation()
    	{
    		return this.immatriculation;
    	}public Button getBoutonDetails()
    	{
            return this.boutonDetails;
        }
    }
    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
    package application;
     
    import java.awt.Dimension;
    import java.awt.Toolkit;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
     
    import javafx.scene.Scene;
    import javafx.scene.control.Label;
    import javafx.scene.layout.BorderPane;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
     
    public class GUIDetailsVehicules
    {
    	public GUIDetailsVehicules()
    	{
    		ConnectionBddSQLite connection = new ConnectionBddSQLite("bddVehicules.db");
    		Connection conn = connection.connect();
     
    		// récuperer la dimension de l'écran
    		Dimension tailleMoniteur = Toolkit.getDefaultToolkit().getScreenSize();
    		int longueur = tailleMoniteur.width * 2 / 3;
    		int hauteur = tailleMoniteur.height * 2 / 3;
     
    		BorderPane bp = new BorderPane();
    		Stage stageDetails = new Stage();
    		Scene sceneDetails = new Scene(bp, longueur, hauteur);
     
    		VBox vb1 = new VBox();
     
    		Label labelMarque = new Label();
    		labelMarque.setMinWidth(longueur / 2);
    		Label labelModele = new Label();
    		labelModele.setMinWidth(longueur / 2);
    		Label labelImmatriculation = new Label();
    		labelImmatriculation.setMinWidth(longueur / 2);
     
    		/******************************************/
     
    		try 
    		{
    			ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM vehicules");
     
    			labelMarque.setText("Marque du véhicule                :   " + rs.getString("marque"));
    			labelModele.setText("Modèle du véhicule                :   " + rs.getString("modele"));
    			labelImmatriculation.setText("Immatriculation du véhicule   :   " + rs.getString("immatriculation"));
     
    		}
    		catch (SQLException e)
    		{
    			e.printStackTrace();
    		}
     
    		/******************************************/
     
    		bp.getChildren().add(vb1);
    		vb1.getChildren().addAll(labelMarque, labelModele, labelImmatriculation);
     
    		stageDetails.setScene(sceneDetails);
    		stageDetails.show();
    	}
    }
    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
    package application;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    public class ConnectionBddSQLite
    {
    	Connection connection = null;
    	Statement statement = null;
    	String pathDataBase = null;
     
    	public ConnectionBddSQLite(String pathDataBase)
    	{
    		this.pathDataBase = pathDataBase;
    	}
     
    	protected Connection connect()
    	{
    		try
    		{
    			Class.forName("org.sqlite.JDBC");
    			connection = DriverManager.getConnection("jdbc:sqlite:" + this.pathDataBase);
    		}
    		catch(Exception e)
    		{
    			System.err.println("Erreur connect (method) : " + e.getMessage());
    		}
    		return connection;
    	}
     
    	protected void executeQuery(String query)
    	{
    		try
    		{
    			statement = connection.createStatement();
    			statement.executeQuery(query);
    		}
    		catch(SQLException e)
    		{
    			System.err.println("Erreur executeQuery (method) : " + e.getMessage());
    		}
    	}
     
    	protected void disconnect()
    	{
    		try
    		{
    			connection.close();
    		}
    		catch (SQLException e)
    		{
    			System.err.println("Erreur disConnect (method) : " + e.getMessage());
    		}
    	}
    }
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [Toutes versions] identifier le bouton dans la caption qui a été cliqué
    Par patricktoulon dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/09/2010, 15h36
  2. Identifier le bouton qui a été cliqué
    Par Anubis dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/10/2009, 19h53
  3. Réponses: 13
    Dernier message: 26/09/2008, 23h51
  4. Identifier différents boutons
    Par Invité dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/09/2007, 12h29
  5. Identifier un bouton
    Par Alec6 dans le forum JSF
    Réponses: 15
    Dernier message: 14/02/2007, 07h52

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