使用HyperlinkListener从JEditorPane获取URL

时间:2017-03-21 20:47:06

标签: java swing hyperlink

嗨我从使用HyperlinkListener在HTML中设置的JEditorPane获取URL时出现问题,我已经检查了很多关于问题的堆栈问题但是它们似乎都没有解决它,我已经减少了代码尽我所能,仍然得到错误。当我使用getURL()方法时,它返回null,当我希望它返回“https://www.google.com”时,getDescription()方法返回字符串“url”,我假设我只是遗漏了一些非常明显的东西

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;


public class View extends JFrame {

    private String urls = "<a href=\"url\">https://www.google.com</a>";
    private JEditorPane textArea;

    public View() {
        super("Test");
        setPreferredSize(new Dimension(400,400));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        textArea = new JEditorPane();
        textArea.setEditable(false);
        textArea.setContentType("text/html");
        textArea.setEditorKit(JEditorPane.createEditorKitForContentType("text/html"));
        textArea.setBackground(Color.lightGray);
        textArea.setEnabled(true);
        textArea.setText(urls);
        textArea.addHyperlinkListener(new HyperlinkListener() {
            public void hyperlinkUpdate(HyperlinkEvent e) {
                if(e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                   System.out.println(e.getURL());
                   System.out.println(e.getDescription());
                }
            }
        });
        add(textArea);

        pack();
        setVisible(true);
    }
}

由于

1 个答案:

答案 0 :(得分:3)

问题不在于HyperlinkListenerHyperlinkEvent

的信息

问题在于您的源HTML,请花一点时间来真正查看它......

<a href=\"url\">https://www.google.com</a>

你能看出它打印url的原因吗?问题是,HyperlinkEvent正在为您提供href(可能还有description)属性,而不是元素的文本。

因此,基于此,您的代码工作正常。

但是,如果您确实想要返回www.google.com,则需要将源HTML更改为更像<a href=\"https://www.google.com\">Google me</a>"

的内容
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;

public class Test extends JFrame {

    private String urls = "<a href=\"https://www.google.com\">Google me</a>";
    private JEditorPane textArea;

    public static void main(String[] args) {
        JFrame test = new Test();
        test.pack();
        test.setLocationRelativeTo(null);
        test.setVisible(true);
    }

    public Test() {
        super("Test");
        setPreferredSize(new Dimension(400, 400));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        textArea = new JEditorPane();
        textArea.setEditable(false);
        textArea.setContentType("text/html");
        textArea.setEditorKit(JEditorPane.createEditorKitForContentType("text/html"));
        textArea.setBackground(Color.lightGray);
        textArea.setEnabled(true);
        textArea.setText(urls);
        textArea.addHyperlinkListener(new HyperlinkListener() {
            public void hyperlinkUpdate(HyperlinkEvent e) {
                if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                    System.out.println(e.getURL());
                    System.out.println(e.getDescription());
                }
            }
        });
        add(new JScrollPane(textArea));
    }
}

这将打印出来

https://www.google.com
https://www.google.com