gpt4 book ai didi

java - 在 JEditorPane 中动态添加 rtf 文件的超链接

转载 作者:行者123 更新时间:2023-11-30 03:18:43 30 4
gpt4 key购买 nike

我目前正在构建一个用 Java 编写的文字处理器,用于多窗口媒体注释工具。它供电影学生撰写论文并将其嵌入多媒体剪辑的链接。

我希望用户能够突出显示 rtf 文档中的文本并创建指向项目中媒体文件的链接。单击该链接后,将在其关联窗口中显示媒体。

我想知道是否可以在Java中动态创建rtf文档中的超链接?例如,在 Word 中就可以实现。

目前,我正在使用 JEditorPane 和高级 RTF 编辑器套件 ( http://java-sl.com/advanced_rtf_editor_kit.html )。我正在努力寻找任何解决方案。

非常感谢任何帮助或指示。

谢谢

编辑:

  • 代码,添加了 @Eric 答案中的第 1 部分和第 3 部分

     `item3.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(java.awt.event.ActionEvent e) {
    //use FX thread to open FileChooser
    Platform.runLater(new Runnable() {
    @Override
    public void run() {
    FileChooser fileChooser = new FileChooser();
    fileChooser.setTitle("create link");
    String startDirectory = System.getProperty("user.home") + File.separator + "Pictures";
    fileChooser.setInitialDirectory(new File(startDirectory));
    FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("JPEG files (*.jpg)", "*.jpg");
    FileChooser.ExtensionFilter extFilter2 = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.png");
    FileChooser.ExtensionFilter extFilter3 = new FileChooser.ExtensionFilter("JPG files (*.jpeg)", "*.jpeg");
    fileChooser.getExtensionFilters().addAll(extFilter,extFilter2, extFilter3);

    File imageFile = fileChooser.showOpenDialog(stage);
    if(imageFile != null){
    Image image = ImageViewerController.getImage();

    try {
    image = new Image(imageFile.toURI().toURL().toExternalForm().toString());


    int start = textArea.getSelectionStart();
    int end = textArea.getSelectionEnd();
    textArea.getDocument().remove(start, end);
    String newString = "{\field{\*\fldinst HYPERLINK 'http://www.google.com/'}{\fldrslt http://www.google.com}}";
    textArea.getDocument().insertString(start, newString , null);
    textArea.addHyperlinkListener(new HyperlinkListener() {
    @Override
    public void hyperlinkUpdate(HyperlinkEvent hle) {
    if (HyperlinkEvent.EventType.ACTIVATED.equals(hle.getEventType())) {
    System.out.println(hle.getURL());
    Desktop desktop = Desktop.getDesktop();
    try {
    desktop.browse(hle.getURL().toURI());
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    }
    }
    });
    } catch (Exception e1) {
    e1.printStackTrace();
    }
    }
    }

    });`

最佳答案

我认为您的问题有多个部分:

1.替换文档中选定的文本:

获取所选范围:

int start = editorpane.getSelectionStart();
int end = editorpane.getSelectionEnd();

将文本替换为:

editorpane.getDocument().remove(start,end);
editorpane.getDocument().insertString(start, newString, null);

注意:如果需要,请将 null 替换为实际属性集。

2. 创建 RTF 格式的超链接。我认为this post拥有一切。

3. 对超链接点击使用react:As explained in the docs ,您必须将 HyperlinkListener 添加到编辑器 Pane 才能打开相应的媒体。然而,此功能起作用的一个条件是,当单击超链接时,编辑器工具包会生成 HyperlinkEvent。 HTML 文档绝对是这种情况,但由于您使用的是第 3 方库,我无法确认它会以相同的方式工作...

关于java - 在 JEditorPane 中动态添加 rtf 文件的超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31883965/

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