0

我正在尝试在 JavaFX 的文本区域内添加一个超链接(它将打开一个文本文件 onclick)。到目前为止,我已经编写了如下代码:

Hyperlink link = new Hyperlink();
    link.setText("Data Sheet");
    link.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent e) {
            try {
                java.awt.Desktop.getDesktop().browse(
                        java.net.URI.create("MY text file"));
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    });
mytxtarea.appendText("Please cleck here "+link);

此代码不起作用。实际上附加文本不起作用。请帮助。

4

2 回答 2

2

您不能在 TextArea 中放置超链接。

TextArea用于编辑文本,而不是显示超链接。

潜在的替代解决方案

  • HTMLEditor - 如果您使用包含超链接的文本预加载 HTMLEditor,则 HTMLEditor 应该可以显示超链接,尽管用户将无法真正编辑超链接,因为 HTMLEditor 并没有真正提供链接编辑功能。
  • RichTextFX - 用于编辑语法高亮文本的第三方 JavaFX 控件,我不知道它是否提供链接编辑功能。
  • TextFlow - 内置控件,允许混合 JavaFX 节点(如文本和超链接)的只读显示。
  • 带有嵌入式第三方基于 JavaScript 的编辑器的 WebView - Web 上有许多基于 JavaScript 的编辑器的源代码,它们能够内联显示和编辑超链接,因此您可以使用嵌入在 JavaFX WebView 组件中的这些编辑器之一。
  • 基于 JavaFX 的 markdown 实现——我刚刚链接到一个这样的实现,如果你用谷歌搜索它们,网上还有其他可用的。
于 2013-07-18T15:31:26.157 回答
0

事实上,您不能在 TextArea 中放置超链接。但是您可以将其与超链接重叠。例如,在我的 fxml 文件中,我有:

  <TextArea fx:id="textArea"/>
  <VBox fx:id="box">
      <children>
      </children>
 </VBox>

在我的控制器中,我需要时在“盒子”节点中添加一个新的超链接,除了处理他的可见性之外,如下所示:

            box.getChildren().clear();
            // for each new link you need to add
                Hyperlink link = new Hyperlink(stringLink);
                link.setOnAction(new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent t) {
                        // do something
                    }
                });
                box.getChildren().add(link);
            });

然后,根据我的工作流程,我有:

private void setEditMode(final boolean editMode) {
    textArea.setVisible(editMode);
    box.setVisible(!editMode);
}

结果是超链接将出现在文本区域的“前面”,因为它被覆盖,然后您可能会得到您所期望的。

于 2016-10-03T21:38:29.587 回答