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 :

Appel d'une méthode d'une classe javaFx dans une classe java


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Par défaut Appel d'une méthode d'une classe javaFx dans une classe java
    Bonsoir à toutes et à tous,

    Voilà, je rencontre un problème de taille.

    J'ai un JTextArea que j'ai wrapper via une classe JavaFx.

    Le soucis est que, des opérations s'effectuent du coté de classes Java normal et je voudrais effectuer un append sur le JTextArea.

    Comment pourrais je accèder à mon composant ?

    Merci d'avance,

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    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 901
    Billets dans le blog
    54
    Par défaut
    De la maniere habituelle, en conservant une reference dessus.

    Sinon pour repondre a la question initiale (voit pas trop le rapport entre le nom du sujet et ce que tu demandes), il te faut definir une interface Java qu'il te faut etendre en JavaFX. Apres tu peux passer une reference sur ton objet JavaFX dans du code Java en utilisant le type de l'interface et en appellant les methodes definies dedans.
    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 Expert
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Par défaut
    De la maniere habituelle, en conservant une reference dessus.
    Le problème qui subsiste est que mes classes fx ne sont pas visible dans mes imports d'une classe java normale.

    Sinon pour repondre a la question initiale (voit pas trop le rapport entre le nom du sujet et ce que tu demandes)
    Mon problème est bien d'appeler une méthode d'une classe Fx dans une classe Java.
    Ou sinon de pouvoir directement appeler la méthode du composant déclarer dans notre classe fx.
    Dans le premier cas, je pourrais me débrouiller afin de setter mes valeurs. Le deuxième cas, se serait le mieux


    , il te faut definir une interface Java qu'il te faut etendre en JavaFX. Apres tu peux passer une reference sur ton objet JavaFX dans du code Java en utilisant le type de l'interface et en appellant les methodes definies dedans.
    Aurais-tu un bout de code à me donner comme exemple ( Je viens d'essayer et mon interface ne voit pas ma classe fx ) ?

    Car pour l'instant, je suis partie sur les scripts engine, pour faire de l'invocation de méthode via ScriptEngineManager et ScriptEngine.

    Merci d'avance,

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    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 901
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par X-plode Voir le message
    Car pour l'instant, je suis partie sur les scripts engine, pour faire de l'invocation de méthode via ScriptEngineManager et ScriptEngine.
    AIE ! J'avoue que je ne suis pas passe trop sur ca sur la version interpretee... J'ai fait tous mes tests sur la version compilee et pour un exemple il ne faut pas aller voir plus loin que l'exemple dans lequel on met un listener JavaFX sur un composant Swing : http://www.developpez.net/forums/d65...x/#post4053074

    Hum as-tu fait des binding quand tu initialize ton moteur de script ? Je n'ai pas trop pousse l'experience loin mais si tu peux binder un objet Java tu peux alors lui passer la reference sur le JTextArea depuis ton script interprete, non ? Je vais voir si je peux faire quelques tests ce matin (cause occupe cette aprem).
    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
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    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 901
    Billets dans le blog
    54
    Par défaut
    Yeah !!!!!!!!!!!!!
    J'ai fait que mes tests precedentss (fait pour tester le binding et l'appel de fonctions membre et statiques) etendent desormais DocumentListener et je les ajoute au Document du JTextArea qui est dans mon script. Et CA MARCHE !

    L'initialisation du moteur de script:
    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
     
        def bindings = scriptEngine.createBindings();
        // JX Bindings.
        bindings.put("now", new Date());
        bindings.put("out", java.lang.System.out);
        bindings.put("err", java.lang.System.err);
        bindings.put("testfx", new TestFX());
        bindings.put("testj", new TestJ());
        [...]
        def scriptContext = new SimpleScriptContext();
        [...]
        // Bug workaround.
        scriptContext.setBindings(bindings, ScriptContext.GLOBAL_SCOPE);
        scriptContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
        scriptEngine.setContext(scriptContext);
    L'ecouteur en Java:
    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
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package interpreter;
     
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;
     
    /**
     *
     * @author fabriceb
     */
    public class TestJ implements DocumentListener {
     
        public void doStuff(String s) {
            System.out.println("TestJ:doStuff: " + s);
        }
     
        public static void doStuffStatic(String s) {
            System.out.println("TestJ:doStuffStatic: " + s);
        }
     
        /**
         * {@inheritDoc}
         */
        @Override
        public void insertUpdate(DocumentEvent e) {
            System.out.println("TestJ:insertUpdate");
     
        }
     
        /**
         * {@inheritDoc}
         */
        @Override
        public void removeUpdate(DocumentEvent e) {
            System.out.println("TestJ:removeUpdate");
        }
     
        /**
         * {@inheritDoc}
         */
        @Override
        public void changedUpdate(DocumentEvent e) {
            System.out.println("TestJ:changedUpdate");
        }
    }
    L'ecouteur en 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
     
    /*
     * Test.fx
     *
     * Created on Mar 2, 2009, 11:49:36 AM
     */
     
    package interpreter;
     
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;
     
        /**
        * @author fabriceb
         */
     
        public function doStuffStatic(s:String):Void {
            println("TestFX:doStuffStatic {s}");
        }
     
    public class TestFX extends DocumentListener {
        public function doStuff(s:String):Void {
            println("TestFX:doStuff {s}");
        }
     
        /**
        * {@inheritDoc}
        */
        public override function changedUpdate(e:DocumentEvent):Void {
            println("TestFX:changedUpdate");
        }
     
        /**
        * {@inheritDoc}
        */
        public override function insertUpdate(e:DocumentEvent):Void {
            println("TestFX:insertUpdate");
        }
     
        /**
        * {@inheritDoc}
        */
        public override function removeUpdate(e:DocumentEvent):Void {
            println("TestFX:removeUpdate");
        }
    }
    Ze interpreted script:
    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
     
    import javafx.stage.*;
    import javafx.scene.*;
    import javafx.ext.swing.*;
    import java.awt.*;
    import javax.swing.*;
     
    // Bind tests.
    println(now);
    testfx.doStuffStatic("Salut");
    testfx.doStuff("Salut");
    testj.doStuffStatic("Salut");
    testj.doStuff("Salut");
     
    // GUI.
    def area = new JTextArea();
    area.setText(now.toString());
    area.getDocument().addDocumentListener(testfx);
    area.getDocument().addDocumentListener(testj);
    def scroll = new JScrollPane(area);
    scroll.setPreferredSize(new Dimension(600, 400));
    def scrollNode = SwingComponent.wrap(scroll);
    var scene:Scene;
    def stage = Stage {
     title: "Test"; 
     override var width on replace {
       scrollNode.width = scene.width;
     }
     override var height on replace {
       scrollNode.height = scene.height;
     };
     scene: scene = Scene {
       content: scrollNode;
     }
    }
    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 Expert
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Par défaut
    Salut,

    C'est super. Je sens que j'arrive au bout de mes peines

    Juste une dernière chose :
    L'initialisation du moteur de script, tu le mets où ?

    Et sinon, si j'ai bien compris ainsi, à chaque fois que la méthode de la classe java sera appelé, la valeur du JTextArea changera c'est bien ça ?
    ( Si c'est ça je dis : Yeah !!!!!!!!!!!!! too et milles mercis )

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

Discussions similaires

  1. [Débutant] Simuler les classes utilisées dans une méthode
    Par Danthen dans le forum C#
    Réponses: 4
    Dernier message: 22/01/2013, 08h11
  2. Réponses: 4
    Dernier message: 08/01/2010, 13h59
  3. Réponses: 3
    Dernier message: 20/04/2009, 09h13
  4. Réponses: 4
    Dernier message: 04/07/2008, 10h34
  5. Réponses: 3
    Dernier message: 05/10/2006, 18h52

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