Обновление Я прибрал класс SwingLink
и добавил больше возможностей; актуальную копию можно найти здесь: https://bitbucket.org/dimo414/jgrep/src/tip/src/grep/SwingLink.java
@ Ответ Макдауэлла великолепен, но есть несколько вещей, которые можно улучшить. Примечательно, что текст, отличный от гиперссылки, кликабелен, и он по-прежнему выглядит как кнопка, хотя некоторые стили были изменены / скрыты. В то время как доступность важна, согласованный пользовательский интерфейс также.
Итак, я собрал класс, расширяющий JLabel, на основе кода Макдауэлла. Он самодостаточен, правильно обрабатывает ошибки и выглядит как ссылка:
public class SwingLink extends JLabel {
private static final long serialVersionUID = 8273875024682878518L;
private String text;
private URI uri;
public SwingLink(String text, URI uri){
super();
setup(text,uri);
}
public SwingLink(String text, String uri){
super();
setup(text,URI.create(uri));
}
public void setup(String t, URI u){
text = t;
uri = u;
setText(text);
setToolTipText(uri.toString());
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
open(uri);
}
public void mouseEntered(MouseEvent e) {
setText(text,false);
}
public void mouseExited(MouseEvent e) {
setText(text,true);
}
});
}
@Override
public void setText(String text){
setText(text,true);
}
public void setText(String text, boolean ul){
String link = ul ? "<u>"+text+"</u>" : text;
super.setText("<html><span style=\"color: #000099;\">"+
link+"</span></html>");
this.text = text;
}
public String getRawText(){
return text;
}
private static void open(URI uri) {
if (Desktop.isDesktopSupported()) {
Desktop desktop = Desktop.getDesktop();
try {
desktop.browse(uri);
} catch (IOException e) {
JOptionPane.showMessageDialog(null,
"Failed to launch the link, your computer is likely misconfigured.",
"Cannot Launch Link",JOptionPane.WARNING_MESSAGE);
}
} else {
JOptionPane.showMessageDialog(null,
"Java is not able to launch links on your computer.",
"Cannot Launch Link", JOptionPane.WARNING_MESSAGE);
}
}
}
Вы также можете, например, изменить цвет ссылки на фиолетовый после нажатия, если это показалось полезным. Все это самодостаточно, вы просто звоните:
SwingLink link = new SwingLink("Java", "http://java.sun.com");
mainPanel.add(link);