我有一个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);
如果用户点击编辑链接,则会显示弹出窗口。否则,请点击内容上的文字,它不起作用。感谢
答案 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;
}
}