gpt4 book ai didi

java - JavaFX Webview 可以发送通知吗?

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:01 24 4
gpt4 key购买 nike

我对使用 JavaFX 和 Webview 还很陌生。我想要做的是当网络引擎的地址(我假设这是通过 webengine.getLocation() 访问的)更改为特定的网址以触发事件,即播放声音文件。不过我有点不知道从哪里开始。任何帮助将不胜感激!

最佳答案

一般方法

如果你只想玩 ping!在导航到特定位置时(例如,每次有人去以“http://www.google.com”开头的某个地方时),写下WebEngine位置更改监听器播放 AudioClip像这样:

final AudioClip ping = new AudioClip(
"http://soundbible.com/grab.php?id=1815&type=wav"
);

webView.getEngine().locationProperty().addListener(new ChangeListener<String>() {
@Override public void changed(ObservableValue<? extends String> observable, String oldLocation, String newLocation) {
if (newLocation != null && newLocation.startsWith("http://www.google.com") {
ping.play();
}
}
});

一般来说,对于这种情况,音频剪辑首选未压缩的 wav 等格式,因为 ping 可能相当小,并且 wav 文件将在所有 JavaFX 目标平台上播放,而不需要安装额外的音频编解码器库。

示例应用程序

这是一个使用 WebView 的迷你 Web 浏览器示例应用程序,它可以 ping!

  1. 一声!每次加载新页面时都会发出声音。
  2. 同一页面上的 anchor 导航不算新页面。
  3. 应用程序中使用的 ping 声音属于公共(public)领域,可从以下地址下载:http://soundbible.com/grab.php?id=1815&type=wav
  4. 您应该下载并使用本地版本的 ping!如果您想在实际应用程序中使用它,请发出声音。

只需在位置文本字段中输入您想要访问的地址,然后按 Enter 键,然后就会在加载页面时听到 ping 的声音。

TheMachineThatGoesPing.java

import javafx.application.Application;
import javafx.beans.value.*;
import javafx.event.*;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.scene.media.AudioClip;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class TheMachineThatGoesPing extends Application {
private static final String HOME_LOC =
"http://en.wikiquote.org/wiki/Monty_Python's_The_Meaning_of_Life";

private WebView webView;
private AudioClip ping;

public static void main(String[] args) { Application.launch(TheMachineThatGoesPing.class); }

@Override
public void init() throws Exception {
ping = new AudioClip("http://soundbible.com/grab.php?id=1815&type=wav");
}

@Override public void start(Stage stage) throws Exception {
webView = new WebView();
webView.setPrefWidth(1000);

final TextField location = new TextField();
location.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
if (!location.getText().startsWith("http")) {
location.setText("http://" + location.getText());
}
webView.getEngine().load(location.getText());
}
});

webView.getEngine().locationProperty().addListener(new ChangeListener<String>() {
@Override public void changed(ObservableValue<? extends String> observable, String oldLocation, String newLocation) {
location.setText(newLocation);
ping.play();
}
});

webView.getEngine().load(HOME_LOC);

VBox layout = new VBox(10);
layout.setStyle("-fx-padding: 10; -fx-background-color: cornsilk;");
layout.getChildren().setAll(
location,
webView
);

stage.setTitle("The machine that goes 'ping!'");
stage.setScene(new Scene(layout));
stage.show();
}
}

关于java - JavaFX Webview 可以发送通知吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16703909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com