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 Java2DInclure Swing dans SceneGraph (4)
pr�c�dent sommaire suivant
 

Depuis JavaFX 8, il est � nouveau possible d'inclure des composants Swing dans une sc�ne de rendu SceneGraph. Cette solution est destin�e � permettre le port rapide d'applications Swing vers JavaFX � moindre co�t ou encore de capitaliser sur l'immense vivier de composants Swing et Java2D d�j� pr�ts � l'emploi compte tenu de l'�ge de cette biblioth�que.

Le n�ud javafx.embed.swing.SwingNode peut �tre utilis� pour inclure un composant Swing dans une arborescence SceneGraph. 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
public class Main extends Application { 
  
    @Override 
    public void start(Stage primaryStage) { 
        final SwingNode swingNode = new SwingNode(); 
        // Cr�ation de l'UI Swing sur le thead EDT de AWT/Swing. 
        SwingUtilities.invokeLater(() -> initSwingUI(swingNode)); 
        final StackPane root = new StackPane(swingNode); 
        final Scene scene = new Scene(root, 300, 300); 
        primaryStage.setTitle("Test d'int�gration de Swing"); 
        primaryStage.setScene(scene); 
        primaryStage.show(); 
    } 
  
    // Cette m�thode est invoqu�e sur le thread EDT de AWT/Swing.   
    private void initSwingUI(final SwingNode swingNode) { 
        final JButton button = new JButton("Cliquez moi !"); 
        button.setToolTipText("Un bouton Swing dans une IU JavaFX !"); 
        final JToolBar toolBar = new JToolBar(); 
        toolBar.add(button); 
        toolBar.setFloatable(false); 
        button.addActionListener(actionEvent -> System.out.println("Salut le monde, depuis Swing !")); 
        final DefaultTableModel tableModel = new DefaultTableModel(new String[]{"Nom", "Pr�nom", "�ge", "Sexe"}, 0); 
        tableModel.addRow(new Object[]{"Henri", "Martin", 28, 'M'}); 
        tableModel.addRow(new Object[]{"Jeanette", "Dupond", 32, 'F'}); 
        tableModel.addRow(new Object[]{"Amedh", "Rehan", 26, 'M'}); 
        tableModel.addRow(new Object[]{"Sylvie", "Durant", 18, 'F'}); 
        tableModel.addRow(new Object[]{"Petelo", "Seasifi", 20, 'M'}); 
        final JTable table = new JTable(tableModel); 
        final JScrollPane tableScroll = new JScrollPane(table); 
        final BorderLayout borderLayout = new BorderLayout(); 
        final JPanel pane = new JPanel(borderLayout); 
        pane.add(toolBar, BorderLayout.NORTH); 
        pane.add(tableScroll, BorderLayout.CENTER);         
        // Ajout des composant Swing dans SceneGraph. 
        swingNode.setContent(pane); 
    } 
  
    public static void main(String[] args) { 
        launch(args); 
    } 
}

Et nous obtenons le r�sultat suivant :


Mis � jour le 3 septembre 2014 bouye

Vous pouvez appliquer n'importe quel effet, transformation ou animation sur le n�ud SwingNode, car ce dernier est un n�ud SceneGraph comme un autre.

Par exemple, le code suivant affecte d'une rotation le n�ud SwingNode contenant notre affichage Swing pr�c�dent :

Code Java : S�lectionner tout
1
2
3
4
5
final RotateTransition rotate = new RotateTransition(Duration.seconds(25), swingNode); 
rotate.setCycleCount(RotateTransition.INDEFINITE); 
rotate.setInterpolator(Interpolator.LINEAR); 
rotate.setByAngle(360); 
rotate.play();

Cependant, il reste tout � fait possible d�interagir avec les composants Swing contenus dans l'affichage, m�me quand ces derniers ont la t�te � l'envers !



Par contre, il est impossible d'appliquer des effets, transformations ou animations JavaFX sur les composants Swing de notre affichage (JPanel, JButton, JTable) directement : le n�ud SwingNode marque une fronti�re entre le monde JavaFX et le monde Swing.

Note : on notera cependant que l'affichage de l'infobulle du bouton n'est pas affect� par la rotation et a lieu � sa position non transform�e puisque cet affichage est g�r� en interne par Swing dans une fen�tre s�par�e.

Mis � jour le 5 septembre 2014 bouye

Actuellement une telle int�gration est possible, mais reste du domaine de l'exp�rimental et n�cessite de recompiler plusieurs classes du moteur de rendu Prism. Il faut de plus forcer Prism � utiliser OpenGL via un param�tre de la JVM.

Mis � jour le 13 octobre 2014 bouye

Pour int�grer World Wind, l'outil SIG de la NASA bas� sur Swing dans JavaFX, il faut utiliser la classe gov.nasa.worldwind.awt.WorldWindowGLJPanel au lieu de la classe gov.nasa.worldwind.awt.WorldWindowGLCanvas.

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
public class Main extends Application { 
  
    @Override 
    public void start(Stage primaryStage) { 
        final SwingNode swingNode = new SwingNode(); 
        final StackPane root = new StackPane(); 
        root.getChildren().add(swingNode); 
        final Scene scene = new Scene(root, 300, 250); 
        primaryStage.setTitle("Test de WorldWind"); 
        primaryStage.setScene(scene); 
        primaryStage.show(); 
        SwingUtilities.invokeLater(() -> initializeWorldWind(swingNode)); 
    } 
  
    private void initializeWorldWind(final SwingNode swingNode) { 
//        final WorldWindowGLCanvas wwd = new WorldWindowGLCanvas(); 
        final WorldWindowGLJPanel wwd = new WorldWindowGLJPanel(); 
        wwd.setPreferredSize(new java.awt.Dimension(300, 250)); 
        wwd.setModel(new BasicModel()); 
        swingNode.setContent(wwd); 
    } 
  
    /** 
     * @param args the command line arguments 
     */ 
    public static void main(String[] args) { 
        launch(args); 
    } 
}

Ce qui nous donne :

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.