5

我为这个冗长的问题道歉。

前几天我在浏览一个论坛,我看到一些链接到 youtube 和其他网站的文本。我必须始终突出显示,然后在谷歌浏览器中复制和粘贴或右键单击“转到”。

由于我一直在使用 Java,所以我想制作自己的小程序,该程序将提供指向具有 address 的文本的链接。例如,如果我说“嘿,看看我前几天看到的 'www.youtube.com' 的这个视频”,我希望 youtube 部分是可点击的。

谁能告诉我这样的事情是否可能,如果是的话,我必须为此使用哪些库,最后,如何找到java中所有导入和库的列表?

谢谢。

4

1 回答 1

21

使用 HTML inJEditorPane和 addHyperLinkListener来检测对 URL 的点击。

比使用桌面 API打开带有 URL 的默认浏览器。

就像是:

在此处输入图像描述

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

public class Test {

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

                JEditorPane jep = new JEditorPane();
                jep.setContentType("text/html");//set content as html
                jep.setText("Welcome to <a href='http://stackoverflow.com/'>StackOverflow</a>.");

                jep.setEditable(false);//so its not editable
                jep.setOpaque(false);//so we dont see whit background

                jep.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();
                            }
                        }
                    }
                });


                JFrame f = new JFrame("HyperlinkListener");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.add(jep);
                f.pack();
                f.setVisible(true);
            }
        });
    }
}
于 2013-01-05T08:43:24.730 回答