在HTML中设置一个超链接是很容易的,使用<a></a>标签就可以完成了。
在客户端应用程序中,并没有这样的标签,但是可以使用按钮来实现,But 有时候就是想好看一点,不想要按钮,只想要个超连接,所以需要自定义这样的一个标签。
那就拿JLable来实现吧:
对于一个超链接来说,需要有链接地址和描述文字,那就直接上代码
首先创建一个LinkLable类,继承JLable,该类应该有如下属性:
public class LinkLabel extends JLabel {
private String text;// 超链接文本
private URL url;// 链接
private Color color = Color.BLUE;// 链接颜色
public LinkLabel(String text, String url) {
super("<html>" + text + "</html>");
this.text = text;
this.setForeground(Color.BLUE);
if (!url.startsWith("http://")) {
url = "http://" + url;
}
try {
this.url = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
// 设置鼠标事件
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
try {
Desktop.getDesktop().browse(LinkLabel.this.url.toURI());//最重要的是这句话,这句话是对点击标签进行web请求的关键
} catch (IOException e1) {
e1.printStackTrace();
} catch (URISyntaxException e1) {
e1.printStackTrace();
};
}
//设置鼠标进入事件,这里只是设置了颜色
@Override
public void mouseEntered(MouseEvent e) {
LinkLabel.this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
color = LinkLabel.this.getForeground();
LinkLabel.this.setForeground(Color.RED);
LinkLabel.this.setText("<html>" + LinkLabel.this.text + "</html>");
}
@Override
public void mouseExited(MouseEvent e) {
LinkLabel.this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
if (color != null) {
LinkLabel.this.setForeground(color);
}
LinkLabel.this.setText("<html>" + LinkLabel.this.text + "</html>");
}
});
}
}
上述代码实现了进行web访问LinkLable,那么有时候不是访问web页面,只是应用程序呢?
其实很简单,只需要改变鼠标点击事件mouseClicked方法的实现就好了,
String url = LocalLinkLabel.this.url;
if("register".equals(url)){
System.out.println("here");
((JFrame)LocalLinkLabel.this.getParent().getParent()
.getParent().getParent().getParent()).dispose();
new RegisterFrame();
}
看到这么多getParent()方法是不是很疑惑?其实只不过是找到该窗体可通过System.out.print(this.getParent())直到找到待关闭的窗体即可;