嗨我从使用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);
}
}
由于
答案 0 :(得分:3)
问题不在于HyperlinkListener
或HyperlinkEvent
问题在于您的源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