IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
logo

FAQ JavaFXConsultez toutes les FAQ

Nombre d'auteurs : 4, nombre de questions : 507, derni�re mise � jour : 2 novembre 2016  Ajouter une question

 

Cette FAQ a �t� r�alis�e � partir des questions fr�quemment pos�es sur le forum JavaFX de http://java.developpez.com ainsi que l'exp�rience personnelle des auteurs.

Nous tenons � souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne pr�tend pas non plus �tre compl�te. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant r�dacteur, lisez ceci.

Sur ce, nous vous souhaitons une bonne lecture.

SommaireSceneGraphUtilisation avanc�eAvec Swing et Java2D (13)
pr�c�dent sommaire suivant
 

Pour tester si l'int�gration avec Swing est support�e par votre plateforme, vous pouvez invoquer la m�thode isSupported() de la classe javafx.application.Platform en lui passant en param�tre la valeur javafx.application.ConditionalFeature.SWING :

Code Java : S�lectionner tout
Platform.isSupported(ConditionalFeature.SWING);

Note : lorsqu'il retourne true, ce test indique que l�int�gration est possible, mais aussi que les runtimes de Swing sont bien pr�sents sur la plateforme.

Mis � jour le 16 septembre 2014 bouye

Cette conversion peut se faire en invoquant la m�thode statique toFXImage() de la classe utilitaire javafx.embed.swing.SwingFXUtils.

Code Java : S�lectionner tout
final WritableImage imageFX = SwingFXUtils.toFXImage(imageSwing, null);

Le second param�tre de la m�thode peut �tre une instance de WritableImage pr�allou�e qui recevra le contenu de l'image source. Quand la valeur pass�e est null, une nouvelle image aux dimensions appropri�es est cr��e.

Mis � jour le 15 mars 2015 bouye

Cette conversion peut se faire en invoquant la m�thode statique fromFXImage() de la classe utilitaire javafx.embed.swing.SwingFXUtils.

Code Java : S�lectionner tout
final BufferedImage imageSwing = SwingFXUtils.fromFXImage(imageFX, null);


Le second param�tre de la m�thode peut �tre une instance de BufferedImage pr�allou�e qui recevra le contenu de l'image source. Quand la valeur pass�e est null, une nouvelle image aux dimensions appropri�es est cr��e.

Mis � jour le 15 mars 2015 bouye

� l'heure actuelle (JDK8_u20), pour sauvegarder une Image JavaFX sur le disque dur, vous devez tout d'abord la convertir en BufferedImage de Swing pour ensuite la sauvegarder en invoquant ImageIO.

Code Java : S�lectionner tout
1
2
final BufferedImage imageSwing = SwingFXUtils.fromFXImage(imageFX, null); 
ImageIO.write(imageSwing, "png", fichierDestination);

Mis � jour le 17 septembre 2014 bouye

Non, Swing n'a jamais �t� con�u pour recevoir des �v�nements tactiles. Int�grer des composants Swing dans une IU JavaFX ou des contr�les JavaFX dans une IU Swing n'est pas suffisant pour que les composants Swing puissent r�agir correctement aux �v�nements tactiles. La gestion monopoint peut �tre simul�e par les �v�nements souris, mais pour prendre en charge la gestion multipoint, il faut continuer � utiliser des biblioth�ques tierces.

Mis � jour le 14 octobre 2014 bouye

Oui, c'est possible. Object Refinery Limited, la compagnie qui �dite la biblioth�que de graphes statistiques JFreeChart pour Swing a publi� en OpenSource la biblioth�que FXGraphics2D (sous licence BSD). Cette biblioth�que permet de recevoir des appels Java2D et de convertir l'affichage sur un Canvas JavaFX. Cela permet d'utiliser avec JavaFX des biblioth�ques tierces qui reposent sur Java2D telles que Batik, iText, JFreeSVG, JFreeChart, JGraphX, JLaTeXMath et plein d'autres encore�

Par exemple :

Code Java : S�lectionner tout
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
public class Main extends Application { 
  
    @Override 
    public void start(Stage primaryStage) { 
        final Canvas canvas = new Canvas() { 
            private final FXGraphics2D g2d; 
  
            { 
                g2d = new FXGraphics2D(getGraphicsContext2D()); 
                widthProperty().addListener(observable -> draw()); 
                heightProperty().addListener(observable -> draw()); 
            } 
  
            private void draw() { 
                final double width = getWidth(); 
                final double height = getHeight(); 
                // Nettoyage de la surface avant dessin. 
                getGraphicsContext2D().clearRect(0, 0, width, height); 
                // Dessin en Java2D ! 
                g2d.setColor(java.awt.Color.RED); 
                g2d.setStroke(new java.awt.BasicStroke(5)); 
                g2d.drawLine(0, 0, (int) width, (int) height); 
                // 
                g2d.setColor(java.awt.Color.BLUE); 
                g2d.fillRect(50, 50, (int) (width - 100), (int) (height - 100)); 
                // 
                final java.awt.geom.Ellipse2D ellipse = new java.awt.geom.Ellipse2D.Double(75, 75, (int) (width - 150), (int) (height - 150)); 
                final java.awt.LinearGradientPaint fill = new java.awt.LinearGradientPaint(0, 75, 0, (int) (height - 150),  
                        new float[]{0f, 1f},  
                        new java.awt.Color[] { java.awt.Color.RED, java.awt.Color.ORANGE}); 
                g2d.setPaint(fill); 
                g2d.fill(ellipse); 
            } 
        }; 
        final StackPane root = new StackPane(); 
        root.getChildren().add(canvas); 
        // Le canevas sera toujours � la taille du n�ud racine. 
        // On aurait pu aussi surcharger layoutChildren() sur le n�ud racine. 
        canvas.widthProperty().bind(root.widthProperty()); 
        canvas.heightProperty().bind(root.heightProperty()); 
        final Scene scene = new Scene(root, 350, 300); 
        primaryStage.setTitle("Test de canevas Java2D"); 
        primaryStage.setScene(scene); 
        primaryStage.show(); 
    } 
  
    public static void main(String[] args) { 
        launch(args); 
    } 
}

Ici, nous dessinons une ligne rouge de deux pixels d��paisseur, un rectangle bleu et une ellipse remplie par un gradient vertical allant du rouge � l'orange en utilisant des m�thodes propres � Java2D et non plus celles de la classe Canvas.

�tant donn� que la classe FXGraphics2D h�rite de la classe java.awt.Graphics2D, nous pouvons dessiner en invoquant les m�mes m�thodes que celles utilis�es en Java2D. De plus, nous pouvons fournir cette r�f�rence aupr�s des biblioth�ques tierces utilisant Java2D de mani�re � avoir leur sortie graphique directement affich�e dans le canevas JavaFX.

Note : contrairement � un contexte graphique directement issu de Java2D qui dessine imm�diatement dans son tampon de pixels, le contexte graphique du canevas JavaFX conserve une pile des instructions de dessin qui lui ont �t� soumises. Cette pile d'appels ne cesse de grandir au fil du temps ce qui peut entrainer une surconsommation de la m�moire. C'est pourquoi il est important de nettoyer r�guli�rement le canevas, c'est � dire, ici, � chaque nouvelle phase d'affichage. Cela peut �tre fait en invoquant la m�thode clearRect() sur l�int�gralit� de sa surface :

Code Java : S�lectionner tout
getGraphicsContext2D().clearRect(0, 0, width, height);

�tant donn� que la zone sp�cifi�e recouvre l�int�gralit� de la surface du canevas, la pile d'instruction de dessins sera enti�rement vid�e ce qui permet � la fois de disposer d'une surface de dessin vierge et de lib�rer les r�f�rences des instructions pr�c�dentes qui seront alors mise � disposition du GC.

Mis � jour le 15 mars 2015 bouye

Proposer une nouvelle r�ponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plut�t sur le forum de la rubrique pour �a


R�ponse � la question

Liens sous la question
pr�c�dent sommaire suivant
 

Les sources pr�sent�es sur cette page sont libres de droits et vous pouvez les utiliser � votre convenance. Par contre, la page de pr�sentation constitue une �uvre intellectuelle prot�g�e par les droits d'auteur. Copyright � 2025 Developpez Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'� trois ans de prison et jusqu'� 300 000 � de dommages et int�r�ts.