2011-07-15 2 views
0

J'essaye d'ajouter un JFXPanel à mon JFrame. J'utilise le générateur d'interface graphique Swing de Netbeans et Netbeans. Quand je l'exécute, je ne reçois aucune erreur et le JFrame est créé avec succès mais le JFXPanel avec le texte n'apparaît pas.Ajout de JFXPanel à un JFrame. Pourquoi ça ne marche pas?

Voici mon code:

public class TestingFX { 

    private static void initJFrame() { 

    NewJFrame frame = new NewJFrame(); 
    final JFXPanel fxPanel = new JFXPanel(); 
    frame.add(fxPanel); 
    frame.setVisible(true); 

    Platform.runLater(new Runnable() { 

     @Override 
     public void run() { 
      fxPanel.setScene(createScene()); 
     } 
    }); 
    } 

    public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      initJFrame(); 
     } 
    }); 
    } 

    public static Scene createScene() { 
    Text text = new Text("Hello World"); 
    text.setFont(new Font(24)); 
    text.setEffect(new Reflection()); 

    BorderPane pane = new BorderPane(); 
    pane.setCenter(text); 
    Scene scene = new Scene(pane); 

    return scene; 
    } 
} 

Pourquoi est-il ne fonctionne pas? Est-ce que je fais quelque chose de mal?

+0

Je n'ai jamais utilisé JavaFX, mais j'ai toujours entendu des résultats négatifs en mélangeant Swing avec JavaFX, cherchez ça sur ce forum, sur le forum NetBeans .. – mKorbel

+0

@Dorothy, Est-ce que ma réponse vous a aidé? – Moonbeam

+1

@Moonbeam Oui. Je viens de mettre en place ton code et ça a marché. Puis j'ai remplacé le JFrame par mon JFrame (NewJFrame) et ajouté 'outerFX.add (javafxPanel, BorderLayout.CENTER);' et 'Application.launch (Demo.class, null);' à mon code personnalisé outerFX JPanels. Après un peu de débogage, je l'ai eu dans le bon ordre et ça a marché. Merci! – Dorothy

Répondre

3

Vous devriez peut-être lire Integrating JavaFX into Swing Applications, puis refactoriser votre code en conséquence.


Essayez

public class Demo extends Application{ 
    private static JFXPanel javafxPanel; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       initAndShowGUI(); 
      } 
     }); 
    } 

    public static void initAndShowGUI() { 
     JFrame frame = new JFrame("Swing application"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // Create JavaFX panel. 
     javafxPanel = new JFXPanel(); 
     frame.getContentPane().add(javafxPanel, BorderLayout.CENTER); 

     // Create JavaFX scene. 
     Application.launch (Demo.class, null); 

     // Show frame. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    @Override 
    public void start (Stage mainStage) { 
     // Add scene to panel 
     javafxPanel.setScene(createScene()); 
    } 

    private static Scene createScene() { 
     Text text = new Text("Hello World"); 
     text.setFont(new Font(24)); 
     text.setEffect(new Reflection()); 

     BorderPane pane = new BorderPane(); 
     pane.setCenter(text); 
     Scene scene = new Scene(pane); 

     return scene; 
    } 
} 

Lors de la création d'une scène, cet exemple suppose que le code que vous avez inclus est valide.

Questions connexes