在JEditorPane

时间:2015-08-07 17:58:25

标签: java swing rtf jeditorpane

我目前正在构建一个文字处理器,用于用Java编写的多窗口媒体注释工具。电影学生可以撰写论文,并将其与多媒体剪辑相关联。

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

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

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

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

谢谢

编辑:

  • 代码,第1部分和第1部分3来自@ Eric的回答

     `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 个答案:

答案 0 :(得分:2)

我认为你的问题有很多部分:

1。替换Document中的所选文字:

获取所选范围:

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。对超链接点击进行反应:As explained in the docs,您必须在编辑器窗格中添加HyperlinkListener以打开相应的媒体。但是,这样做的一个条件是,当单击超链接时,编辑器工具包会生成HyperlinkEvent个。这肯定是HTML文档的情况,但由于您使用的是第三方库,我无法确认它的工作方式是否相同......