尝试使用JavaFX 2实现“Caret Browsing”

时间:2012-02-20 06:55:46

标签: java javafx javafx-2

我正在尝试使用JavaFX 2.0编写一个应用程序,其中包含一个Web浏览器控件,允许用户浏览HTML页面上的文本和图像仅使用键盘 - 基本上就像Internet Explorer中的“插入浏览”。

目标是能够选择一些文本或图像,并将它们复制到变量中,以便在不使用鼠标的情况下进行进一步操作。

我在这里看了一下HTMLEditor控件: http://docs.oracle.com/javafx/2.0/ui_controls/editor.htm#CHDBEGDD 但我不需要任何编辑功能混乱UI,文档说:

  

格式化工具栏是在执行中提供的   零件。你无法切换他们的知名度。

WebView似乎是一个合理的选择(http://docs.oracle.com/javafx/2.0/webview/jfxpub-webview.htm),但我不确定如何将光标放到页面上。

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

当前WebView对插入符号浏览的支持对我来说似乎不完整。

以下是我发现的快速测试:

  1. 我可以调用webView.requestFocus让WebView请求专注于响应按键,但它只是作为一个整体在WebView上运行,而不是在WebView中的单个组件。
  2. WebView不会实现类似于TextInputControl的选择管理API,以便对选择进行细粒度的程序化管理。
  3. WebView允许您选择文本。但是,我必须用鼠标拖动来启动选择,然后我可以使用键盘放大或缩短选择(通过字符选择的字符的左或右箭头键和ctrl +左或右箭头键为单词单词选择 - 向上和向下箭头不影响选择。)
  4. 在WebView中选择一些文本后,我可以按下Ctrl-C(在Windows中)将其复制到剪贴板并将文本粘贴到另一个程序中。仅复制了原始文本 - 关联的样式/ html信息和图像未被复制。
  5. 要复制图像,我必须右键单击图像,然后从下拉菜单中选择复制图像,我可以将图像粘贴到MS Paint中 - 没有鼠标我找不到办法。
  6. 在其他浏览器中我可以按TAB和Shift + TAB从一个超链接转到下一个 - 在WebView中,一旦它有焦点,TAB将从一个控件(例如WebView中的html文本字段)转到下一个(例如文本字段中的html按钮)。
  7. 退格键与其他浏览器一样(将您带到上一页)。
  8. 上述限制,以及我未测试过的其他限制,可能会让您很难完成您想要做的事情。您可以尝试使用eventfilter捕获按键事件等内容,然后生成鼠标事件以启动选择和复制过程,但这听起来很难,即便如此,JavaFX中目前还没有生成公共API来生成鼠标事件,只有不稳定的com.sun api。

    WebView确实公开了document object model,文档为scriptable by JavaScript。尝试使用eventfilter捕获关键事件,在文档属性中搜索更改并在适当的时间针对WebView执行JavaScript以获取和设置当前选择。实施起来似乎有点棘手。

    使用当前的WebView控件和公共API,并在遇到短缺时http://javafx-jira.kenai.com处记录问题,尽可能多地完成。