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 :

Comment passer argument a une instance Javafx


Sujet :

JavaFX

  1. #1
    Membre averti
    Homme Profil pro
    ouvrier
    Inscrit en
    Mars 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : ouvrier

    Informations forums :
    Inscription : Mars 2016
    Messages : 9
    Par défaut Comment passer argument a une instance Javafx
    Bonjour,

    Je suis debutant.

    J'ai devellopé un appli qui fait des traitement et lance diverses actions.
    A cela j'avais decidé d'implementer une IHM via Swing, fenetre, cases a cocher, une console, ce genre de chose.
    Avec Swing je faisais une classe Fenetre, que j'appellais avec un argument afin de lui passer mes arguments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fenetre fenetre = new Fenetre(programme);
    Puis dans ma fenêtre je pouvais agir sur mon programme de la sorte :
    ou du programme aller dans la fenetre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    programme.fenetre.getCaseOnouOff();
    Depuis je veux essayer javafx, même si son avenir est incertain comme j'ai pu le lire ici, peu importe, cest pour apprendre et m'amuser.

    Je n'arrive pas a passer de paramètre a la fenêtre :
    Même en faisant un Setteur, il ne passe pas la barre du launch() de javaFx.
    Le code soumis est peut être pas au point, certes, mais c'est la méthode de passation d'argument qui m'intéresse, je vois bien que le quelque chose m'échappe, et je bloque.

    la classe appelante, qui exécute les lancement:
    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
    95
    import java.*;
    import java.awt.AWTException;
    import java.awt.EventQueue;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.util.ArrayList;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
     
    import javafx.application.Application;
     
     
     
     
    	public class LancerP extends Thread  {
     
     
    		public static boolean actif = true;
    		static WebDriver driver;
     
    	TachePrice tache;
    	Fenetre tfenetre;
    	FxFenetre fxFenetre;
    	LancerP p;
     
     
     
     
     
    		public void lancerp(LancerP p) {
    			this.p = p ;
    //			try {
    			//	tfenetre = new Fenetre(p);
    				fxFenetre = new FxFenetre();
     
    				fxFenetre.main();
    				fxFenetre.setP(p);
     
     
    //			} catch (IOException e) {System.out.println("IO exeption");}
     
    		}
     
     
     
     
     
     
    	public static void main(String[] args) throws AWTException, IOException  {
    		LancerP pStart = new LancerP();
    		pStart.lancerp(pStart);
     
    				}
     
     
     
     
     
     
     
     
     
     
    public static void arreter(){
    	actif = false;
     
    }
     
    public WebDriver setDriver(WebDriver driver) {
    	driver = this.driver;
    	return driver;
     
     
    }
     
     
     
     
     
    public void lancerTachePrice(String url, String nomDeCompte, String motDePasse){
    	tache = new TachePrice(p, urlr, nomDeCompte, motDePasse);
    	tache.allume = true;
    	System.out.println(tache.getName());
        System.out.println(tache.getState());
    	if (!tache.isAlive()){
    		tachestart();
    		System.out.println(tache.getName());
    	    System.out.println(tache.getState());
    class main de javafx
    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
    public class FxFenetre extends Application {
     
    	  LancerP p;
     
     
     
    	@Override
        public void start(Stage primaryStage) throws Exception {
           primaryStage.setTitle("findpage");
     
           FxFenetreController controller = new FxFenetreController();
           controller.setLancerP(p);
     
           FXMLLoader loader = new FXMLLoader();
           loader.setLocation(getClass().getResource("FxFenetre.fxml"));
           ScrollPane myPane = (ScrollPane) loader.load();
           controller = loader.getController();
           Scene myScene = new Scene(myPane);
           primaryStage.setScene(myScene);
           primaryStage.show();
        }
     
     
     
     
     
        public static void main() {
     
    	        launch();
     
     
        }
     
    	  public void setP(LancerP p){
    		  this.p = p;
     
    	  }
    le controller javafx
    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
     
    	import java.io.IOException;
    import java.net.URL;
    	import java.util.ResourceBundle;
    	import javafx.fxml.FXML;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.control.Button;
    	import javafx.scene.control.CheckBox;
    	import javafx.scene.control.PasswordField;
    import javafx.scene.control.ScrollPane;
    import javafx.scene.control.TextField;
     
    	public class FxFenetreController extends ScrollPane {
    		LancerP p;
     
    	    @FXML
    	    private ResourceBundle resources;
     
    	    @FXML
    	    private URL location;
     
    	    @FXML
    	    private Button boutonOn;
     
    	    @FXML
    	    private Button boutonOff;
     
    	    @FXML
    	    private Button bypassPause;
     
    	    @FXML
    	    private TextField nomDeCompte;
     
    	    @FXML
    	    private PasswordField motDePasse;
     
    	    @FXML
    	    private TextField url;
     
     
     
    	    @FXML
    	    void initialize() {
    	        assert boutonOn != null : "fx:id=\"boutonOn\" was not injected: check your FXML file 'fxFenetre.fxml'.";
    	        assert boutonOff != null : "fx:id=\"boutonOff\" was not injected: check your FXML file 'fxFenetre.fxml'.";
    	        assert bypassPause != null : "fx:id=\"bypassPause\" was not injected: check your FXML file 'fxFenetre.fxml'.";
    	        assert nomDeCompte != null : "fx:id=\"nomDeCompte\" was not injected: check your FXML file 'fxFenetre.fxml'.";
    	        assert motDePasse != null : "fx:id=\"motDePasse\" was not injected: check your FXML file 'fxFenetre.fxml'.";
    	        assert url != null : "fx:id=\"url\" was not injected: check your FXML file 'fxFenetre.fxml'.";
     
     
    	    }
     
     
     
     
     
     
     
     
    	    public void setLancerP(LancerP p) {
    	        this.p = p;}
     
     
     
    	    @FXML
    	    private void boutonOn(){
    	    	System.out.println("on");
     
    	    	p.lancerP("http://www.amazon.fr", "login", "mdp");
     
     
    	    	}
    	    @FXML
    	    private void boutonOff(){ System.out.println("off");}
     
    	}
    le fxml
    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    <?xml version="1.0" encoding="UTF-8"?>
     
    <?import javafx.embed.swing.SwingNode?>
    <?import javafx.geometry.Insets?>
    <?import javafx.scene.control.Button?>
    <?import javafx.scene.control.CheckBox?>
    <?import javafx.scene.control.PasswordField?>
    <?import javafx.scene.control.ScrollPane?>
    <?import javafx.scene.control.Tab?>
    <?import javafx.scene.control.TabPane?>
    <?import javafx.scene.control.TextField?>
    <?import javafx.scene.layout.BorderPane?>
    <?import javafx.scene.layout.ColumnConstraints?>
    <?import javafx.scene.layout.FlowPane?>
    <?import javafx.scene.layout.GridPane?>
    <?import javafx.scene.layout.RowConstraints?>
    <?import javafx.scene.layout.VBox?>
     
    <ScrollPane fitToHeight="true" fitToWidth="true" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1"  fx:controller="ppackage.FxFenetreController">
       <content>
          <BorderPane>
             <top>
                <GridPane>
                   <columnConstraints>
                      <ColumnConstraints hgrow="NEVER" minWidth="50.0" />
                      <ColumnConstraints hgrow="NEVER" minWidth="100.0" prefWidth="150.0" />
                      <ColumnConstraints hgrow="SOMETIMES" />
                   </columnConstraints>
                   <rowConstraints>
                      <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
                   </rowConstraints>
                   <children>
                      <VBox>
                         <children>
                            <Button fx:id="boutonOn" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#boutonOn" text="on" />
                            <Button fx:id="boutonOff" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#boutonOff" text="off" />
                            <Button fx:id="bypassPause" maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Passer pause" />
                         </children>
                      </VBox>
                      <VBox GridPane.columnIndex="1">
                         <children>
                            <TextField fx:id="nomDeCompte" text="" />
                            <PasswordField fx:id="motDePasse" prefHeight="25.0" prefWidth="96.0" text="" />
                            <TextField fx:id="" text="" />
                         </children>
                      </VBox>
                      <FlowPane columnHalignment="CENTER" hgap="15.0" rowValignment="TOP" GridPane.columnIndex="2">
                         <children>
                            <CheckBox fx:id="a" contentDisplay="RIGHT" graphicTextGap="2.0" mnemonicParsing="false" selected="true" text="a">
                               <FlowPane.margin>
                                  <Insets />
                               </FlowPane.margin>
                            </CheckBox>
                            <CheckBox fx:id="z" contentDisplay="RIGHT" graphicTextGap="2.0" mnemonicParsing="false" selected="true" text="z">
                               <FlowPane.margin>
                                  <Insets />
                               </FlowPane.margin>
                            </CheckBox>
                            <CheckBox fx:id="e" contentDisplay="RIGHT" graphicTextGap="2.0" mnemonicParsing="false" selected="true" text="e">
                               <FlowPane.margin>
                                  <Insets />
                               </FlowPane.margin>
                            </CheckBox>
                            <CheckBox contentDisplay="RIGHT" graphicTextGap="2.0" mnemonicParsing="false" selected="true" text="">
                               <FlowPane.margin>
                                  <Insets />
                               </FlowPane.margin>
                            </CheckBox>
                            <CheckBox contentDisplay="RIGHT" graphicTextGap="2.0" mnemonicParsing="false" selected="true" text="">
                               <FlowPane.margin>
                                  <Insets />
                               </FlowPane.margin>
                            </CheckBox>
                            <CheckBox contentDisplay="RIGHT" graphicTextGap="2.0" mnemonicParsing="false" selected="true" text="">
                               <FlowPane.margin>
                                  <Insets />
                               </FlowPane.margin>
                            </CheckBox>
                            <CheckBox contentDisplay="RIGHT" graphicTextGap="2.0" mnemonicParsing="false" selected="true" text="CheckBox">
                               <FlowPane.margin>
                                  <Insets />
                               </FlowPane.margin>
                            </CheckBox>
                            <CheckBox contentDisplay="RIGHT" graphicTextGap="2.0" mnemonicParsing="false" selected="true" text="CheckBox">
                               <FlowPane.margin>
                                  <Insets />
                               </FlowPane.margin>
                            </CheckBox>
                            <CheckBox contentDisplay="RIGHT" graphicTextGap="2.0" mnemonicParsing="false" selected="true" text="CheckBox">
                               <FlowPane.margin>
                                  <Insets />
                               </FlowPane.margin>
                            </CheckBox>
                            <CheckBox contentDisplay="RIGHT" graphicTextGap="2.0" mnemonicParsing="false" selected="true" text="CheckBox">
                               <FlowPane.margin>
                                  <Insets />
                               </FlowPane.margin>
                            </CheckBox>
                         </children>
                         <padding>
                            <Insets left="5.0" />
                         </padding>
                      </FlowPane>
                   </children>
                </GridPane>
             </top>
             <center>
                <TabPane tabClosingPolicy="UNAVAILABLE">
                  <tabs>
                    <Tab text="Console">
                         <content>
                            <SwingNode />
                         </content>
                      </Tab>
                    <Tab text="Parametres" />
                    <Tab text="Xpath" />
                    <Tab text="default" />
                  </tabs>
                </TabPane>
             </center>
             <bottom>
                <CheckBox mnemonicParsing="false" selected="true" text="" />
             </bottom>
          </BorderPane>
       </content>
    </ScrollPane>
    Si vous aviez une méthode en tete ?
    Merci de m'avoir lu.
    Nico

  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
    Hum, du coup je ne pige pas trop. Pourquoi est-ce que c'est le programme non-graphique qui lance le programme graphique ?

    Sachant que c'est l'appel a Application.launch() qui va créer une instance de FxFenetre, du coup tu te retrouves avec deux instances de l'application : celle que tu as créée (qui sert a rien) et celle crée par Application.launch() qui va s'afficher.

    Ici FxFenetre, n'est pas une fenêtre (Stage) c'est une Application, ce n'est pas la même chose. Le code suivant devrait plus se rapprocher de ce que tu faisais en Swing :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        public void lancerp(LancerP p) {
            this.p = p;
            new JFXPanel();
            Platform.runLater(() -> {
                try {
                    fxFenetre = new FxFenetre();
                    fxFenetre.setP(p);
                } catch (Exception ex) {
                    Logger.getLogger(LancerP.class.getName()).log(Level.SEVERE, null, ex);
                }
            });
        }
    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
    public class FxFenetre extends Stage {
     
        LancerP p;
     
        public FxFenetre() throws Exception {
            setTitle("findpage");
            FxFenetreController controller = new FxFenetreController();
            controller.setLancerP(p);
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource("FxFenetre.fxml"));
            ScrollPane myPane = (ScrollPane) loader.load();
            controller = loader.getController();
            Scene myScene = new Scene(myPane);
            setScene(myScene);
            show();
        }
     
        public void setP(LancerP p) {
            this.p = p;
        }
    }
    Pourquoi créer un JFXPanel qui sert a rien ici ? Tout simplement car c'est actuellement le seul et unique moyen d’initialiser les runtimes JavaFX a mano. Sans cela on ne peut pas creer le contenu du Stage.
    Une manière de faire indépendante du contrôle sera rajoutée dans le JDK 9.
    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 averti
    Homme Profil pro
    ouvrier
    Inscrit en
    Mars 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : ouvrier

    Informations forums :
    Inscription : Mars 2016
    Messages : 9
    Par défaut
    Merci pour ta réponse, je vais essayer cette aprem.
    En effet, ça me semble déjà plus clair.

    Alors pourquoi le non graphique lance le graphique ?
    Bah je pensais que comme cela, mon code peut fonctionner sans interface, l'interface sert juste a controller l'apli si on le souhaite, et on peut choisir soit l'ancienne version swing ou la javafx au demarrage.
    Mais je dois t'avouer que je suis sacrement débutant en conception programme , donc si c'est complétement tordu, je suis prêt a l'entendre.

  4. #4
    Membre averti
    Homme Profil pro
    ouvrier
    Inscrit en
    Mars 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : ouvrier

    Informations forums :
    Inscription : Mars 2016
    Messages : 9
    Par défaut
    Re bonsoir, bon j'ai pu tester ça avec succès en effet.
    Cependant, dans ma configuration du moins, j'ai du placer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    controller.SetLancerP(p);
    après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    controller = loader.getController();
    , évidement.
    Tout fonctionne comme attendu.
    Merci pour ton aide, c'est résolu.


    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
    public class FxFenetre extends Stage {
     
        LancerP p;
     
        public FxFenetre(LancerP p) throws Exception {
            setTitle("findpage");
            FxFenetreController controller = new FxFenetreController();
            controller.setLancerP(p);
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource("FxFenetre.fxml"));
            ScrollPane myPane = (ScrollPane) loader.load();
            controller = loader.getController();
            controller.setLancerP(p);
            Scene myScene = new Scene(myPane);
            setScene(myScene);
            show();
        }

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/10/2007, 18h54
  2. Réponses: 1
    Dernier message: 11/08/2007, 17h16
  3. [gedit] Comment faire pour avoir une instance de gedit par onglet ?
    Par Davidbrcz dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 25/06/2007, 11h58
  4. Réponses: 2
    Dernier message: 04/04/2007, 14h13
  5. Réponses: 5
    Dernier message: 22/09/2005, 10h15

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