我想让JEditorPane中的所有链接都可以点击。我试图使用此answer中的代码,但可能我做错了,因为当我点击链接时没有任何反应。这是我的代码:
JEditorPane news = new JEditorPane();
news.setSize(Size.L_NEWS);
news.setLocation(Position.L_NEWS);
news.setFocusable(false);
news.setBackground(new Color(255, 255, 255, 0));
news.setEditable(false);
news.setEnabled(false);
news.setOpaque(false);
news.setVisible(true);
news.setEditorKit(JEditorPane.createEditorKitForContentType("text/html"));
news.setText(getNewsHTML.getNewestNews());
try{
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e){
e.printStackTrace();
}
news.addHyperlinkListener(new HyperlinkListener() {
public void hyperlinkUpdate(HyperlinkEvent e) {
if(e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
if(Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().browse(e.getURL().toURI());
}
catch (IOException | URISyntaxException e1) {
e1.printStackTrace();
}
}
}
}
}
);
login_form.add(news);
在这里 - 我的进口(也许是他们的问题):
import java.awt.Color;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
有什么问题?我没有任何输出到Eclipse的控制台。
答案 0 :(得分:7)
来自我的评论:
请参阅我的简单示例here:
你的问题在于:
news.setEnabled(false);
不要将其设置为禁用,否则它将无法捕获鼠标点击等事件。
也不确定为什么你有:
news.setFocusable(false);
news.setVisible(true);
只需添加到容器并使容器可见,就不需要将组件设置为可见。也不要让它无法聚焦,因为这可能会在以后引起问题。您的setEditable(false)
应该足够了(因为无论焦点如何,用户都无法编辑它)