在Java中将JavaFX Web引擎嵌入到Java Swing JPanel中

时间:2017-07-04 14:16:08

标签: java swing javafx netbeans

我有以下代码,但我不太确定如何在另一个JFrame中的特定JPanel中实现它。

或者我如何在另一个类别的另一个JPanel中显示这个特定的JPanel。

import com.sun.javafx.application.PlatformImpl;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javafx.application.Platform;
import javafx.collections.ObservableList;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/** 
 * SwingFXWebView 
 */  
public class SwingFXWebView extends JPanel {  

private Stage stage;  
private WebView browser;  
private JFXPanel jfxPanel;  
private JButton swingButton;  
private WebEngine webEngine;  

public SwingFXWebView(){  
    initComponents();  
}  

public static void main(String ...args){  
    // Run this later:
    SwingUtilities.invokeLater(new Runnable() {  
        @Override
        public void run() {  
            final JFrame frame = new JFrame();  



            frame.getContentPane().add(new SwingFXWebView());


            frame.setMinimumSize(new Dimension(960, 480));  
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
            frame.setVisible(true); 

        }  
    });     
}  

private void initComponents(){  

    jfxPanel = new JFXPanel();  
    createScene();  

    setLayout(new BorderLayout());  
    add(jfxPanel, BorderLayout.CENTER);  

    swingButton = new JButton();  
    swingButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            Platform.runLater(new Runnable() {

                @Override
                public void run() {
                    webEngine.reload();
                }
            });
        }
    });  
    swingButton.setText("Reload");  

    add(swingButton, BorderLayout.SOUTH);  
}     

/** 
 * createScene 
 * 
 * Note: Key is that Scene needs to be created and run on "FX user thread" 
 *       NOT on the AWT-EventQueue Thread 
 * 
 */  
private void createScene() {  
    PlatformImpl.startup(new Runnable() {  
        @Override
        public void run() {  

            stage = new Stage();  

            stage.setTitle("Hello Java FX");  
            stage.setResizable(true);  

            Group root = new Group();  
            Scene scene = new Scene(root,80,20);  
            stage.setScene(scene);  

            // Set up the embedded browser:
            browser = new WebView();
            webEngine = browser.getEngine();
            webEngine.load("http://www.google.com");

            ObservableList<Node> children = root.getChildren();
            children.add(browser);                     

            jfxPanel.setScene(scene);  
        }  
    });  
}

}

0 个答案:

没有答案