我正在使用“JLabel”来显示段落,我需要将该段落的某些部分作为链接打开一个新的弹出窗口,请告诉我如何执行此操作,例如。
this is ABC application and here is the introduction of the app:
this is line one
this is line two
this is line three
在这里,我必须将单词“two”作为可点击的链接来打开弹出窗口。
答案 0 :(得分:4)
我个人会建议使用JEditorPane而不是JPanel;它对于显示段落更有用,并且可以显示HTML,例如链接。然后,您可以简单地调用addHyperlinkListener(Some hyperlinklistener)来添加一个侦听器,当有人单击该链接时将调用该侦听器。你可以弹出一些东西,或者打开在真实浏览器中点击的内容,由你决定。
这是一些示例代码(尚未测试,应该可以工作):
JEditorPane ep = new JEditorPane("text/html", "Some HTML code will go here. You can have <a href=\"do1\">links</a> in it. Or other <a href=\"do2\">links</a>.");
ep.addHyperlinkListener(new HyperlinkListener() {
public void hyperlinkUpdate(HyperlinkEvent arg0) {
String data = arg0.getDescription();
if(data.equals("do1")) {
//do something here
}
if(data.equals("do2")) {
//do something else here
}
}
});
答案 1 :(得分:1)
通常当我们想要一个可点击的标签时,我们只需将它作为一个按钮即可。我最近使用Label而不是按钮,因为我发现它更容易控制外观(图标周围没有边框),我希望标签看起来有所不同,具体取决于应用程序显示的一些数据。但我可能只是用JButton完成了整个事情。
如果您只想点击JLabel的部分,那就会变得更加复杂。单击鼠标时,您需要检查相对鼠标坐标,看它是否与您想要点击的标签部分相对应。
或者,您可能希望查看JEditorPane。这允许您将HTML放入swing应用程序,然后您可以实现一些HyperLinkListener。
但是如果你确实需要一个标签来触发一个动作,就像你最初要求的那样,你可以像这样添加一个mouselistener:
noteLabel = new JLabel("click me");
noteLabel.addMouseListener( new MouseAdapter() {
public void mousePressed(MouseEvent e) {
System.out.println("Do something");
}
public void mouseEntered(MouseEvent e) {
//You can change the appearance here to show a hover state
}
public void mouseExited(MouseEvent e) {
//Then change the appearance back to normal.
}
});