如何在JTextArea中添加可单击的URL?
【腾讯云】亏本大甩卖,服务器4核16G 1年370元(带宽12M,系统盘120GB SSD盘,月流量2000GB)!!!!!!
云产品 配置 价格
服务器 1核2G,带宽5M,系统盘50GB SSD盘,月流量500GB 38元/年
MySQL 1核1G 19元/年
服务器 16核32G,带宽18M,系统盘250GB SSD盘,月流量5000GB 1197元/年
点我进入腾讯云,查看更多详情

I am writing an application and in that I am using JTextArea to display some text. Now I want to show some clickable URL in text area along with the normal text and I want if user click on the URL then the web page that URL referring to should open in new web browser window.

#0

Use JEditorPane with HTMLEditorKit or JTextPane and set content type to "text/html"

#1

..url referring to should open in new web browser window.

// 1.6+
Desktop.getDesktop().browse(URI);

#2

Here is an example of opening links from JTextArea:

                JTextArea jtxa = new JTextArea(25,100);
                JScrollPane jsp = new JScrollPane(jtxa);
                JPanel jp = new JPanel();
                jp.add(jsp);
                jp.setSize(100,50);

                jtxa.addMouseListener(new MouseAdapter()
                {
                    public void mouseClicked(MouseEvent me)
                    {
                        if(me.getClickCount()==2) //making sure there was a double click
                        {
                            int x = me.getX();
                            int y = me.getY();

                            int startOffset = jtxa.viewToModel(new Point(x, y));//where on jtextarea click was made
                            String text = jtxa.getText();
                            int searchHttp = 0;
                            int wordEndIndex = 0;
                            String[] words = text.split("\\s");//spliting the text to words. link will be a single word

                            for(String word:words)
                            {
                                if(word.startsWith("https://") || word.startsWith("http://"))//looking for the word representing the link
                                {
                                    searchHttp = text.indexOf(word);
                                    wordEndIndex = searchHttp+word.length();
                                    if(startOffset>=searchHttp && startOffset<=wordEndIndex)//after the link word was found, making sure the double click was made on this link
                                    {
                                        try
                                        {
                                            jtxa.select(searchHttp, wordEndIndex);
                                            desk.browse(new URI(word)); //opening the link in browser. Desktop desk = Desktop.getDesktop();
                                        }
                                        catch(Exception e)
                                        {
                                            e.printStackTrace();
                                        }

                                    }
                                }
                            }                           
                        }

                    }
                });

推荐文章

除了TDD,松耦合代码还有其他好处吗?

除了TDD,松耦合代码还有其他好处吗?

推荐文章

MS Office用户的报表图表和数据

MS Office用户的报表图表和数据

推荐文章

flex的DataGrid的标题中添加图标以及限制单元格的输值

flex的DataGrid的标题中添加图标以及限制单元格的输值

推荐文章

使用实体框架作为数据访问层

使用实体框架作为数据访问层

推荐文章

为什么要用黑苹果

为什么要用黑苹果

推荐文章

如何使用同一个SqlConnection对象跨多个sqlcommand声明和使用T-SQL变量来执行多个插入?

如何使用同一个SqlConnection对象跨多个sqlcommand声明和使用T-SQL变量来执行多个插入?

推荐文章

Bundle目的:

Bundle目的:

推荐文章

如何使单个控件出现在多个选项卡控件页上?

如何使单个控件出现在多个选项卡控件页上?

推荐文章

Bootstrap学习总结笔记(10)-- 基本组件之导航

Bootstrap学习总结笔记(10)-- 基本组件之导航

推荐文章

为什么我不能从文件写入程序获取文件通道?

为什么我不能从文件写入程序获取文件通道?

推荐文章

如何获取SQL server触发器中已更新列的列表?

如何获取SQL server触发器中已更新列的列表?

推荐文章

bootstroop table 自定义搜索

bootstroop table 自定义搜索

推荐文章

如何通过webservice传输文档?

如何通过webservice传输文档?

推荐文章

diskutil Mac OS X Manual Page

diskutil Mac OS X Manual Page

推荐文章

对可枚举范围foreach与传统for循环的思考

对可枚举范围foreach与传统for循环的思考

推荐文章

Web服务器上的WAV/MP3转换

Web服务器上的WAV/MP3转换