为JLabel中包含的超链接添加事件

时间:2015-08-04 09:59:28

标签: java swing hyperlink jlabel

我有一个jlabel节目内容,然后我添加一个包含内容的超链接。使用标签。我有一个问题如何用户可以单击此超链接,鼠标点击监听器工作。 这是我的代码:

String languages="<html> Deutsch, English (All), English (United Kingdom), Bahasa Indonesia, Italiano <a href=\"\">  edit</a> </html>";
            GUIConstants.ELM_ALIGN_RIGHT), 240, 0));*/
    JLabel lblLanguage= new JLabel();
    lblLanguage.setFont((new Font("Arial", Font.PLAIN, 12)));
    lblLanguage.setText(languages);

如果用户点击编辑链接,则会显示弹出窗口。否则,请点击内容上的文字,它不起作用。感谢

2 个答案:

答案 0 :(得分:1)

根据您的要求,我建议将JEditorPane与超链接侦听器一起使用,如此问题中所述:Is it possible to create programs in Java that create text to link in Chrome?

在您的情况下,您不会关注网址,而是打开JDialog(因此请相应地调整听众)。

(别忘了让它不可编辑!)

答案 1 :(得分:0)

我认为这符合您的目标:

import java.awt.BorderLayout;

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

public class HtmlMsg {

    /**
     * @param args
     */
    public static void main(String[] args) {

        JFrame frame = new JFrame("Message with HTML link");

        String languages="<html> Deutsch, English (All), English (United Kingdom), "
                + "Bahasa Indonesia, Italiano <a href=\"\">  edit</a> </html>";

        frame.getContentPane().add( panelWithHtmlListener(languages));
        frame.pack();
        frame.setVisible(true);
    }


    /**
     * Returns a panel with an HTML listener, displaying msg.
     *
     * @param msg
     *       to be displayed. Should contain HTML or html tag.
     *
     * @return
     */
    private static JPanel panelWithHtmlListener(String msg){

        JEditorPane jEditorPane = new JEditorPane("text/html", msg);
        jEditorPane.setEditable(false);
        jEditorPane.setOpaque(false);

        HyperlinkListener listener = new HyperlinkListener() {
            @Override
            public void hyperlinkUpdate(HyperlinkEvent hyperLink) {

                if (HyperlinkEvent.EventType.ACTIVATED.
                                equals(hyperLink.getEventType())) {
                    try {
                       //respond to html link clicked
                        JOptionPane.showMessageDialog(null, "HTML has been clicked !!" );
                    }
                    catch (Exception ex) { ex.printStackTrace();}


                }
            }

        };

        jEditorPane.addHyperlinkListener(listener);

        JPanel jPanel = new JPanel();
        jPanel.setLayout(new BorderLayout(5, 5));
        jPanel.add(jEditorPane,  BorderLayout.CENTER);


        return jPanel;
    }

}