在JavaFX中的textarea中添加超链接

时间:2013-07-18 13:51:27

标签: javafx-2

我正在尝试在JavaFX中的textarea中添加一个超链接(它将打开一个文本文件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);

此代码无效。实际上附加文字没有用。请帮忙。

2 个答案:

答案 0 :(得分:1)

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

TextArea用于编辑文字,不显示超链接。

潜在的替代解决方案

  • HTMLEditor - 如果您使用包含超链接的文本预加载HTMLEditor,则HTMLEditor应显示超链接OK,但用户将无法真正编辑超链接,因为HTMLEditor不是真的提供链接编辑功能。
  • RichTextFX - 用于编辑语法高亮显示文本的第三方JavaFX控件,我不知道它是否提供链接编辑功能。
  • TextFlow - 内置控件,允许只读显示混合JavaFX节点,如文本和超链接。
  • WebView with an embedded third party JavaScript based editor - Web上有许多基于JavaScript的编辑器,可以在线显示和编辑超链接,因此您可以使用嵌入在JavaFX WebView组件中的其中一个编辑器。
  • JavaFX based markdown implementation - 我刚刚与其中一个此类实施相关联,如果您对其进行谷歌搜索,则可以在网络上找到其他实现。

答案 1 :(得分:0)

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

.horizontal-scroll {
  overflow-x: scroll;
  white-space: nowrap;
  width:1000px;
}

<ion-scroll direction="x" scrollbar-x="false" overflow-scroll="false">
  <div class="horizontal-scroll">
    <ion-item style="float:left" ng-repeat="otherRides in allRides" href="#/tab/others/{{others.ID}}">
      <img ng-src="{{others.icon}}" style="float:left">
        Time: {{others.time}}
        <br>Est: <span ${{others.price}}
    </ion-item>
  </div>
</ion-scroll>

在我的控制器中,我在&#34;框中添加了一个新的超链接&#34;节点,当我需要,除了处理他的可见性,像这样:

  <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);
            });

结果是超链接将出现在&#34;前面。文本区域,因为它被覆盖,然后你可能会有你期望的。