swing和java里嵌入瀏覽器使用JavaFX的方式

一 背景

swing可以編寫一個(gè)桌面程序,只要機(jī)器上裝有jre即可打開。那么swing中是否可以嵌入web頁面呢?

二 JavaFX方式實(shí)例

在Swing中嵌入一個(gè)JavaFX的網(wǎng)頁瀏覽器

import java.awt.BorderLayout;
import java.awt.Toolkit;
import java.io.File;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javax.swing.JFrame;

public class Main {
    private static final int WIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;
    private static final int HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;
    private static final String url = "http://www.baidu.com";
    private static final String urlStart = "http://";

    /**
     * @param args
     */
    public static void main(String[] args) {
        JFrame frame = new JFrame("嵌入瀏覽器");
        final JFXPanel webBrowser = new JFXPanel();
        frame.setLayout(new BorderLayout());
        frame.add(webBrowser, BorderLayout.CENTER);
        Platform.runLater(new Runnable() {

            @Override
            public void run() {
                Group root = new Group();
                Scene scene = new Scene(root, WIDTH, HEIGHT);
                webBrowser.setScene(scene);
                Double widthDouble = new Integer(WIDTH).doubleValue();
                Double heightDouble = new Integer(HEIGHT).doubleValue();

                VBox box = new VBox(10);
                HBox urlBox = new HBox(10);
                final TextField urlTextField = new TextField();
                urlTextField.setText(url);
                Button go = new Button("go");
                urlTextField.setPrefWidth(WIDTH - 80);
                urlBox.getChildren().addAll(urlTextField, go);

                WebView view = new WebView();
                view.setMinSize(widthDouble, heightDouble);
                view.setPrefSize(widthDouble, heightDouble);
                final WebEngine eng = view.getEngine();
                eng.load(url);
                root.getChildren().add(view);

                box.getChildren().add(urlBox);
                box.getChildren().add(view);
                root.getChildren().add(box);

                go.setOnAction(new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent event) {
                        if (!urlTextField.getText().startsWith(urlStart)) {
                            eng.load(urlStart + urlTextField.getText());
                        } else {
                            eng.load(urlTextField.getText());
                        }
                    }
                });
            }
        });

        int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
        int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(WIDTH, HEIGHT);
        frame.setLocation((screenWidth - WIDTH) / 2, (screenHeight - HEIGHT) / 2);
        frame.setVisible(true);
    }

}

三 效果

這是一個(gè)很簡(jiǎn)單的例子。

我們創(chuàng)建了JFrame和JFXPanel,然后在Platform.runLater中進(jìn)行Scene的創(chuàng)建,并設(shè)置到JFXPanel中。

我們創(chuàng)建了一個(gè)Textfield用來輸入網(wǎng)址,創(chuàng)建了一個(gè)JavaFX Button來跳轉(zhuǎn)到網(wǎng)址。判斷網(wǎng)址是不是http://開頭并做簡(jiǎn)單的處理。

下面看看運(yùn)行效果:


效果圖.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文地址:https://www.tutorialspoint.com/javafx/javafx_applica...
    Eirture閱讀 7,795評(píng)論 0 16
  • 晚點(diǎn)的火車剛剛駛出寶雞站,就傳來了列車播音員焦急的聲音:“各位旅客大家好,3號(hào)車廂有位小朋友感冒發(fā)燒,由于列車上沒...
    行者超閱讀 2,379評(píng)論 31 28
  • 今天周五,明天終于不用早起啦!真開心!孩子盼著過周末!其實(shí),我也盼著!我也想偷個(gè)懶! 我看嘉怡對(duì)閱讀興趣不大,我一...
    靜雅_(tái)15de閱讀 502評(píng)論 0 1
  • Hadoop集群環(huán)境搭建 Hadoop集群環(huán)境搭建 HDFS 圖說HDFS基本原理hadoop的shell命令操作...
    piziyang12138閱讀 539評(píng)論 0 0
  • 莊子說:天地有大美而不言。當(dāng)我們放慢腳步,留心身邊美好的事物,植物中大概竹子的剪影是最有韻味的,古雅的庭院在素壁前...
    青心_4f70閱讀 620評(píng)論 1 3

友情鏈接更多精彩內(nèi)容