2013-05-08 48 views
1

我搜索的如何使可點擊的鏈接中JEditorPane,我發現這個問題可點擊HTML鏈接,但使用replaceSelcetion梅索德

Is it possible to create programs in Java that create text to link in Chrome?

這是非常有用的,但我的代碼中使用重複聲明

JEditorPane jep = new JEditorPane(); 
jep.setContentType("text/html"); 
jep.setEditable(true);// Because .replaceSelection can't work with disabled edit 
for (int i = 1; i <= 3; i++){ 
    jep.replaceSelection(
     "Welcome to <a href='https://stackoverflow.com/'>StackOverflow i </a>."); 
} 
jep.setEditable(false); 

現在它顯示我只是文本沒有可點擊的鏈接,所以我如何使它正確和我真的需要replaceSelection方法

+0

我不明白是什麼問題。添加您鏈接的帖子中建議的'HyperlinkListener'。爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org),以顯示您卡住的位置。 – 2013-05-08 17:30:54

+0

@GuillaumePolet:我懷疑他期待'replaceSelection()'有不同的結果。 – trashgod 2013-05-08 17:58:12

回答

1

HTMLDocument上使用replaceSelection()插入原始字符串;你想插入一個HTML錨點標記。您可以

  • 管理原始的HTML文本自己,下方所示,讓setText()處理解析。

  • 使用現有的HTMLEditorKit嵌套操作之一。

  • 使用看到的一種自定義方法here

image

import java.awt.Desktop; 
import java.awt.HeadlessException; 
import javax.swing.JEditorPane; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 
import javax.swing.event.HyperlinkEvent; 
import javax.swing.event.HyperlinkListener; 

/** 
* @see https://stackoverflow.com/a/16447176/230513 
* @see https://stackoverflow.com/a/14170141/230513 
*/ 
public class Test { 

    public static void main(String[] argv) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       display(); 
      } 
     }); 
    } 

    private static String create(int i) { 
     StringBuilder sb = new StringBuilder(); 
     sb.append("Welcome to <a href="); 
     sb.append("'http://www.example.com'>Example "); 
     sb.append(i); 
     sb.append("</a>.<br>"); 
     return sb.toString(); 
    } 

    private static void display() throws HeadlessException { 
     JEditorPane jep = new JEditorPane(); 
     jep.setContentType("text/html"); 
     StringBuilder sb = new StringBuilder(); 
     sb.append("<b>Welcome</b>:<br><hr>"); 
     for (int i = 1; i <= 3; i++) { 
      sb.append(create(i)); 
     } 
     sb.append("<hr>"); 
     jep.setText(sb.toString()); 
     jep.setEditable(false); 
     jep.addHyperlinkListener(new HyperlinkListener() { 
      @Override 
      public void hyperlinkUpdate(HyperlinkEvent e) { 
       if (HyperlinkEvent.EventType.ACTIVATED.equals(e.getEventType())) { 
        System.out.println(e.getURL()); 
        Desktop desktop = Desktop.getDesktop(); 
        try { 
         desktop.browse(e.getURL().toURI()); 
        } catch (Exception ex) { 
         ex.printStackTrace(); 
        } 
       } 
      } 
     }); 

     JFrame f = new JFrame("HyperlinkListener"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(jep); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 
} 
+0

感謝您的幫助,我真的很感激。現在我明白問題在哪裏了。我試了你的方法在這個例子中,它完美的工作 – 2013-05-08 19:24:28

+0

很高興你把它分類。 – trashgod 2013-05-09 00:35:58