当前位置: 首页 > 面试题库 >

JavaFX WebEngine中的HyperlinkListener

柴茂材
2023-03-14
问题内容

过去,我使用过JEditorPane,现在我尽最大努力使用JavaFX
WebEngine。如何在显示的页面上为包含超链接的事件注册侦听器(如链接选择或单击链接)?

在JEditorPane中,有addHyperlinkListener方法…

编辑:

我遵循第一个答案中的建议。这是我的代码:

webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {
    public void changed(ObservableValue ov, State oldState, State newState) {
        if (newState == Worker.State.SUCCEEDED) {
                // note next classes are from org.w3c.dom domain
            EventListener listener = new EventListener() {
                public void handleEvent(Event ev) {
                    System.out.println("KLIKNIETO!!!");
                }
            };

            Document doc = webEngine.getDocument();
            Element el = doc.getElementById("a");
            NodeList lista = doc.getElementsByTagName("a");
            System.out.println("Liczba elementow: "+ lista.getLength());
            for (int i=0; i<lista.getLength(); i++)
                ((EventTarget)lista.item(i)).addEventListener("click", listener, false);
        }
    }
});

单击链接后,我现在收到事件。但是,我需要获得对单击链接的引用(以获取其内容)。我该如何实现?


问题答案:

加载相关文档后,可以使用w3c dom类在Java中添加单击事件处理程序,以捕获链接单击事件。

请参阅JavaFX WebView中的检测HTML textarea
onkeyup事件中的
Sergey示例。

您还可以使用JavaScript(例如,使用jQuery)捕获事件,这可能比使用w3c
dom api容易一些。

如果您使用JavaScript捕获事件,并且想要反馈事件的通知或从JavaScript到Java的后续处理,则可以使用JavaScript <=>
Java bridge
api。

我已记录了将此功能的示例添加到官方WebView教程的请求。



 类似资料:
  • 我使用子JPanel构造JScrollPane,然后尝试将JScrollPane添加到父JPanel中,希望有一个可滚动的自定义JPanel。 我有一个大的细白线前面的所有我的组件,他们是没有滚动。有什么想法吗?

  • 我已经为android Studio创建了一个webview应用程序。但没有加载web URL。错误为NET::ERR_ACCESS_DENIED。有谁能帮忙吗

  • 我有一个使用Java Version8的Spring和Maven的项目。当我运行maven update时,它适用于Java9或更高版本,当我编译它时,它适用于Java8。我注意到了这一点,因为用Maven更新会将一个特定的类更改为Java9,而我无法导入这个类。 这个类是:javax.annotation.generated(Java8)。 这是要导入的类。但是,当我进行maven更新时,文件的

  • 当应用程序启动EncryptionBootstrapConfiguration无法自动装配我的自定义TextEncryptor-https://github.com/spring-cloud/spring-cloud-commons/blob/cde7c7f3118382490c28776f66e0a56f248141fd/spring-cloud-context/src/main/java/or

  • 我有一个问题,找出我的源代码中的错误。 有什么办法可以解决它吗? 我的代码中抛出了“ArrayIndexOutOfBoundsException”,但我无法找到它的位置。 android studio中的logcat:

  • RISC-V 与中断相关的寄存器和指令 [info] 回顾:RISC-V 中的机器态(Machine Mode,机器模式,M 模式) 是 RISC-V 中的最高权限模式,一些底层操作的指令只能由机器态进行使用。 是所有标准 RISC-V 处理器都必须实现的模式。 默认所有中断实际上是交给机器态处理的,但是为了实现更多功能,机器态会将某些中断交由内核态处理。这些异常也正是我们编写操作系统所需要实现的