一 背景
swing可以编写一个桌面程序,只要机器上装有jre即可打开。那么swing中是否可以嵌入web页面呢?
二 JavaFX方式实例
在Swing中嵌入一个JavaFX的网页浏览器
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);
}
}
三 效果
这是一个很简单的例子。
我们创建了JFrame和JFXPanel,然后在Platform.runLater中进行Scene的创建,并设置到JFXPanel中。
我们创建了一个Textfield用来输入网址,创建了一个JavaFX Button来跳转到网址。判断网址是不是http://开头并做简单的处理。
下面看看运行效果:
效果图.png
网友评论