JavaFX与Web技术融合:HTML、CSS、JS的实战应用
发表时间: 2024-05-29 12:21
JavaFX应用中使用WebView加载一个包含CSS样式和JavaScript的HTML文件。
文件结构:
project/│├── src/│ └── main/│ ├── java/│ │ └── com.example/│ │ └── WebViewWithHTMLCSSJS.java│ └── resources/│ └── web/│ ├── index.html│ ├── styles.css│ └── script.js
其中,index.html引用了styles.css和script.js:
index.html
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>JavaFX WebView with CSS and JS</title> <link rel="stylesheet" type="text/css" href="styles.css"/></head><body> <h1>Welcome to JavaFX WebView</h1> <p id="message">This text will be modified by JavaScript.</p> <button onclick="changeText()">Click me</button> <script src="script.js"></script></body></html>
styles.css
body { font-family: Arial, sans-serif; background-color: #f0f0f0;}h1 { color: #333;}button { background-color: #4CAF50; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer;}
script.js
function changeText() { document.getElementById("message").innerText = "Text changed by JavaScript!";}
接下来,在WebViewWithHTMLCSSJS.java中加载上述HTML文件:
import javafx.application.Application;import javafx.concurrent.WorkerStateEvent;import javafx.event.EventHandler;import javafx.scene.Scene;import javafx.scene.layout.StackPane;import javafx.scene.web.WebEngine;import javafx.scene.web.WebView;import javafx.stage.Stage;public class WebViewWithHTMLCSSJS extends Application { @Override public void start(Stage primaryStage) { WebView webView = new WebView(); WebEngine engine = webView.getEngine(); // 设置加载完成后的回调 engine.getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> { if (newValue == WorkerStateEvent.SUCCEEDED) { System.out.println("Page loaded."); } }); // 加载本地资源目录下的HTML文件 engine.load(getClass().getResource("/web/index.html").toExternalForm()); StackPane root = new StackPane(); root.getChildren().add(webView); Scene scene = new Scene(root, 800, 600); primaryStage.setScene(scene); primaryStage.setTitle("JavaFX WebView with HTML, CSS, and JS"); primaryStage.show(); } public static void main(String[] args) { launch(args); }}
通过engine.load(...)方法,你直接加载了资源目录下的index.html,其中的CSS和JavaScript引用也会被自动处理和加载,前提是路径正确无误。
注意,确保在打包应用时,所有资源文件(包括HTML、CSS、JS等)都被正确地包含在最终的部署包中。