2016-03-01 2 views
0

Je veux un webview redimensionnable dans InternalFrame mais ce que j'ai des plantages. Ceci est mon code:JavaFX et Swing redimensionnable JFXPanel

/** 
* Create the frame. 
*/ 
public TestBtn() { 
    setClosable(true); 
    setResizable(true); 
    setMaximizable(true); 
    setIconifiable(true); 
    getContentPane().setBackground(Color.GRAY); 

    JFXPanel panel = new JFXPanel(); 
    getContentPane().add(panel, BorderLayout.CENTER); 
    getContentPane().add(panel, BorderLayout.CENTER); 
    setBounds(100, 100, 764, 546);  
    Platform.runLater(new Runnable() { 
     @Override 
     public void run() { 
      initFX(panel); 
     } 
    }); 
    this.addComponentListener(new ComponentAdapter() { 
     @Override 
     public void componentResized(ComponentEvent e) { 
      initFX(panel); 
     } 
    }); 
} 
private static void initFX(JFXPanel fxPanel) { 
    // This method is invoked on the JavaFX thread 
    Scene scene = createScene(); 
    fxPanel.setScene(scene); 

} 

private static Scene createScene() { 
    Group root = new Group(); 
    Scene scene = new Scene(root); 
    WebView view = new WebView(); 
    WebEngine engine = view.getEngine(); 
    engine.onResizedProperty(); 
    engine.load("http://google.bg"); 
    root.getChildren().add(view); 

    return (scene); 
} 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       TestBtn frame = new TestBtn(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

Je reçois cette erreur après que j'essaie de maximiser la fenêtre InternalFrame:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = AWT-EventQueue-0 
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Unknown Source) 
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(Unknown Source) 
at javafx.scene.web.WebEngine.checkThread(Unknown Source) 
at javafx.scene.web.WebEngine.<init>(Unknown Source) 
at javafx.scene.web.WebEngine.<init>(Unknown Source) 
at javafx.scene.web.WebView.<init>(Unknown Source) 
at test.TestBtn.createScene(TestBtn.java:79) 
at test.TestBtn.initFX(TestBtn.java:71) 
at test.TestBtn.access$0(TestBtn.java:69) 
at test.TestBtn$2$1.componentResized(TestBtn.java:63) 
at java.awt.Component.processComponentEvent(Unknown Source) 
at javafx.embed.swing.JFXPanel.processComponentEvent(Unknown Source) 
at java.awt.Component.processEvent(Unknown Source) 
at java.awt.Container.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$500(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 
+0

Vous ajoutez le même panneau deux fois au cadre. – CodeRunner

+0

CodeRunner je ne peux pas vous comprendre ce que vous voulez dire en ajoutant deux fois le panneau im new en java ^^: D – Micr0

+0

Aux lignes 11 et 12 vous ajoutez le même panneau deux fois au même endroit. – CodeRunner

Répondre

0

Vous essayez de modifier les composants JavaFX sur le fil Swing. Je pense que c'est dans votre écouteur de composant. Essaye ça.

panel.addComponentListener(new ComponentAdapter() { 
    @Override 
    public void componentResized(ComponentEvent e) { 
     Platform.runLater(new Runnable() { 
      @Override 
      public void run() { 
       initFX(panel); 
      } 
     }); 
    } 
}); 
+0

Ce ne fonctionne pas avec ce spectacle la page après maxsimize InternalFrame et la page son petit – Micr0

+0

Essayez à la place d'ajouter le componentListener au JFXPanel. J'ai mis à jour l'exemple pour correspondre. –