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 :

java & javaFX


Sujet :

JavaFX

  1. #1
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut java & javaFX
    salut tous le monde.
    j'essaye de découvrir la technologie javaFX et je veut savoir si je peut appeler
    un morceau de code écrit en javaFX dans un programme java ?
    si c'est possible , alors comment procéder ?
    merci pour votre réponse.

  2. #2
    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
    Bonsoir,

    Pour pouvoir procéder à ce dont tu souhaites, il faut utiliser une astuce.

    Toutes les informations ici.

    Bon courage,

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    EDIT - et là je me suis rendu compte en relisant que j'avais compris la question dans le sens inverse, preuve que je ne suis pas bien réveillé ce matin , voir plus bas.

    Tu l'appelles... exactement comme si tu l'appelais depuis un bout de code en Java. Donc :
    1. Ton JAR, zip ou répertoire contenant les classes doit être dans le CLASSPATH.
    2. Tu dois importer le package ou classes nécessaires.
    3. Tu instancies tes objets Java :
    4. Une classe JavaFX peut hériter directement d'une classe Java et d'une infinité d'interfaces 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
       
      public class MaClasse extends JButton, ActionListener, ComponentListener {
          init {
              setText("Cliquez sur le bouton !");
              addActionListener(this);
              addComponentListener(this);
          }
       
        public override function actionPerformed(e:ActionEvent):Void {
          [...]
        }
       
        public override function componentResized(e:ComponentEvent):Void {
          [...]
        }
       
        [...]
      }
       
      [...]
       
      def frame = new JFrame("Swing Frame");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setLayout(new FlowLayout(FlowLayout.LEFT));
      frame.add(MaClasse{});
      frame.pack();
      frame.setVisible(true);
       
      Stage {
          title: "FX Stage"
          scene: Scene {
              content: SwingComponent.wrap(MaClasse{})
          }
          onClose: function():Void {
              FX.exit();
          }
      }
      Par contre il faut que la classe mère ait un constructeur par défaut (sans paramètre) accessible il me semble.


    Les choses à savoir sont :
    • Pas de support des Generics, donc, quand on utilise des collections ou des classes généricifiées, c'est comme ci on faisait du Java pre-1.5 : on manipule des classes contenant des Object, il faudra donc caster avec le mot-clé as.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
       
      // Si on etait dans du Java on aurait reçu une List<Integer>, ici on reçoit une List<Object>.
      def intList:List = ...
      def value:Integer = intList.get(0) as Integer;
    • Les séquences JavaFX NE SONT pas des tableaux Java. Généralement quand le code n'est pas trop tordu on peut passer de l'un à l'autre mais parfois pas. JavaFX 1.2 a rajouté le support des tableaux natifs (tableaux Java) ce qui permet de faciliter le problème :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
       
      // Convertit une sequence d'Integer en un Integer[]
      def intArray:nativeArray of Integer = [1,2, 3, 4] as nativeArray of Integer;
      On peut utliser la syntaxe [] sur les nativearray, par contre les operateurs tels que insert, delete et slice generent des exceptions bien sur (puisque les tableaux Java sont de taille imutable).
    • Parfois il m'est arrivé dans JavaFX 1.0 et 1.1 (pas trop fait gaffe en 1.2 puisque j'avais déjà refactorisé mon code) qu'il n'arrive pas à déterminer quelle méthode Java appeler quand on avait, dans notre classe Java, des signatures dans le style :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
       
      public class Truc {
        public int calculateDistance(int x1, int y1, int x2, int y2) {
          [...]
        }
       
        public float calculateDistance(float x1, float y1, float x2, float y2) {
          [...]
        }
       
        public double calculateDistance(double x1, double y1, double x2, double y2) {
          [...]
        }
      Donc pour régler ce problème, dans ton projet JavaFX tu insères une classe Java (tu peux avoir du code Java dans ton projet JavaFX, c'est utile si tu dois faire des interfaces ou des enums par exemple) qui a des méthodes du genre :

      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
      class Bidule {
        private Truc delegated = new Truc();
      
        public int calculateDistanceAsInt(int x1, int y1, int x2, int y2) {
          return delegated.calculateDistance(x1, y1, x2, y2) {
        }
      
        public float calculateDistanceAsFloat(float x1, float y1, float x2, float y2) {
          return delegated.calculateDistance(x1, y1, x2, y2) {
       }
      
       public double calculateDistanceAsDouble(double x1, double y1, double x2, double y2) {
         return delegated.calculateDistance(x1, y1, x2, y2) {
       }
      }


    -- EDIT--

    Sinon via le mecanisme de l'héritage (à partir d'une interface ou classe abstraite ou classe Java), il est tout à fait possible de fournir à des classes pure-Java des listeners, observateurs, classes délégées ou n'importe quel type d'objet qui suive une pattern quelconque et qui soit en fait écrit en JavaFX.

    Le principal problème est celui de l'instanciation : autant il est facile d'instancier une classe FX depuis du code FX autant ca peut être galère depuis du code Java, les principales solutions sont (voir dans la FAQ et les propositions pour la FAQ) :
    • Faire un projet JavaFX, il n'y a alors aucun problème pour instancier les classes FX. C'est simple mais pas forcément top quand tout le reste du projet est intégralement en Java (nottament car dans NetBeans le déboggeur dans un projet JavaFX a vraiment du mal quand il doit traverser des classes en Java).
    • Utiliser les classes de réflection JavaFX. C'est un peu lourd mais ça marche, c'est ce que fait l'exemple de Sun. A noter que la dernière version de JFXtras permet de créer un objet/contrôle JavaFX héritant de javafx.scene.Scene dans un composant Swing de cette manière mais en cachant toute la partie réflection à l'utilisateur.
    • Utiliser l'API de l'interpréteur de script pour interpréter dynamiquement un script FX qui générera la classe nécessaire. Comme c'est du code interprété dynamiquement on perd un peu tout ce qui est vérification à la compilation (il est donc bienvenu de tester le code séparément avant de l'intégrer dans le projet).
    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. thread java et javafx
    Par chungech dans le forum JavaFX
    Réponses: 2
    Dernier message: 24/03/2010, 10h56

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