Swing使用JavaFXweb组件

概述

swing中内嵌入web组件的 需要使用一些其他的jar包 ,但是如果使用javafx的组件,那么也比较的方便,性能也比较高.

代码

  • webview 在javafx 中是作为 scene出现的所以不需要单独设置部件类型.

  • 下面是单独的地址处理方法

private static void gotoURL(String url) {
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                webView.getEngine().load(url);
            }
        });
    }

  • swing嵌入fx 一般的写法
    这里注意 webview 最好是 静态化
    Platform.runLater(new Runnable() {
            @Override
            public void run() {
                webView = new WebView();
                jFXPanel.setScene(new Scene(webView));
                webView.getEngine().load("http://www.baidu.com");
            }
        });
  • 剩下的就是布局处理 你喜欢就好 , 这里我选择的了一个splash,出场动画, 可要可不要.
public class SwingFinal {

    static WebView webView = null;

    private static void gotoURL(String url) {
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                webView.getEngine().load(url);
            }
        });
    }

    /**
     * @param args
     *            the command line arguments
     * @throws URISyntaxException
     */
    public static void main(String[] args) throws MalformedURLException, URISyntaxException {
        // TODO code application logic here
        JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());
        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        JFXPanel jFXPanel = new JFXPanel();
        frame.add(jFXPanel, "Center");

        JPanel controlPanel = new JPanel();
        frame.add(controlPanel, "North");
        JTextField urlField = new JTextField();
        JButton goButton = new JButton("GO");
        ///////////////////////////////////////////////////////////////////////////////////
        urlField.setText("http://www.baidu.com");

        controlPanel.setLayout(new BorderLayout());
        urlField.setPreferredSize(new Dimension(frame.getWidth() - 100, 1));
        controlPanel.add(urlField, BorderLayout.WEST);
        controlPanel.add(goButton, BorderLayout.EAST);

        controlPanel.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent e) {
                controlPanel.setLayout(new BorderLayout());
                urlField.setPreferredSize(new Dimension(frame.getWidth() - 100, 1));
                controlPanel.add(urlField, BorderLayout.WEST);
                controlPanel.add(goButton, BorderLayout.EAST);
            }

        });
        frame.addWindowStateListener(new WindowStateListener() {
            @Override
            public void windowStateChanged(WindowEvent e) {
                controlPanel.setLayout(new BorderLayout());
                urlField.setPreferredSize(new Dimension(frame.getWidth() - 100, 1));
                controlPanel.add(urlField, BorderLayout.WEST);
                controlPanel.add(goButton, BorderLayout.EAST);
            }
        });
        goButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                String urlString = urlField.getText();
                gotoURL(urlString);
            }

        });
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                webView = new WebView();
                jFXPanel.setScene(new Scene(webView));
                webView.getEngine().load("http://www.baidu.com");
            }
        });

        JWindow splashWindow = new JWindow();
        splashWindow.setSize(1024, 768);
        splashWindow.setLocationRelativeTo(null);
        splashWindow.setLayout(new BorderLayout());
        File file = new File(SwingFinal.class.getResource("fox.png").toURI());
        ImageIcon icon = new ImageIcon(file.toURL());
        JLabel label = new JLabel(icon);
        splashWindow.add(label);
        Thread t = new Thread() {
            public void run() {
                frame.setVisible(false);
                splashWindow.setVisible(true);
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException ex) {
                    Logger.getLogger(SwingFinal.class.getName()).log(Level.SEVERE, null, ex);
                }
                splashWindow.setVisible(false);
                frame.setVisible(true);

            }
        };
        t.setDaemon(true);
        t.start();
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                if (JOptionPane.showConfirmDialog(null, "????", "??�?", JOptionPane.YES_NO_OPTION,
                        JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
                    System.exit(0);
                }
            }

        });

    
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,084评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,724评论 25 709
  • 林夕打开和他的聊天记录,定格在凌晨12点20最后一条消息“你玩吧,我睡了”他回“好的,晚安。”然后林夕陷入长久的失...
    不倾城阅读 3,607评论 0 3
  • “人生差不多就是这样一个饭局,你既要跟相悦的人推杯,也要和厌见的人换盏。一顿饭吃下去,你可以领受一颗心,也可以见识...
    小艾子大水瓶阅读 1,456评论 0 0
  • Hi, girl! 今天风和日丽,蜜蜂歌唱小鸟儿叫。你是自己宅在家吗?还是自己在加班?反正现在你是在拿着手机看这篇...
    苏梨绯公子阅读 4,164评论 0 0