Активная ссылка HTML в JEditorPane

Я хотел бы сделать все ссылки в JEditorPane кликабельными. Я пытался использовать код из этого ответа, но, вероятно, я сделал что-то не так, потому что ничего не происходит, когда я нажимаю на связь. Вот мой код:

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.


person xaxes    schedule 13.02.2013    source источник
comment
Я думаю, что, возможно, это news.setEnabled(false); и/или news.setFocusable(false); может вызвать проблемы. Не отключайте его/заставляйте его не получать фокус. Это можно просто сделать, сделав его недоступным для редактирования (через `news.setEditable(false);`), что вы и сделали...   -  person David Kroukamp    schedule 14.02.2013
comment
Теперь это работает. Спасибо!   -  person xaxes    schedule 14.02.2013


Ответы (1)


Из моих комментариев:

См. мой простой пример здесь:

http://i.stack.imgur.com/SglJF.png

Ваша проблема заключается здесь:

news.setEnabled(false);

Не отключайте его, иначе он не сможет перехватывать такие события, как щелчок мышью и т. д.

Также не уверен, почему у вас есть:

news.setFocusable(false);
news.setVisible(true);

Компонент не нужно делать видимым, просто добавьте его в контейнер и сделайте контейнер видимым. Также не делайте его нефокусируемым, так как позже это может вызвать проблемы. Вашего setEditable(false) должно быть достаточно (поскольку пользователь не сможет редактировать его независимо от фокуса)

person David Kroukamp    schedule 13.02.2013