2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com
.intellij
.ui
;
18 import org
.jetbrains
.annotations
.NonNls
;
21 import javax
.swing
.event
.HyperlinkEvent
;
22 import javax
.swing
.event
.HyperlinkListener
;
23 import javax
.swing
.plaf
.basic
.BasicHTML
;
25 import java
.awt
.event
.MouseAdapter
;
26 import java
.awt
.event
.MouseEvent
;
27 import java
.util
.ArrayList
;
30 * @author Eugene Belyaev
32 public class HoverHyperlinkLabel
extends JLabel
{
33 private String myOriginalText
;
34 private final ArrayList
<HyperlinkListener
> myListeners
= new ArrayList
<HyperlinkListener
>();
36 public HoverHyperlinkLabel(String text
) {
37 this(text
, Color
.BLUE
);
40 public HoverHyperlinkLabel(String text
, Color color
) {
42 myOriginalText
= text
;
47 private void setupListener() {
48 addMouseListener(new MouseHandler());
51 public void setText(String text
) {
52 if (BasicHTML
.isHTMLString(getText())) { // if is currently showing string as html
53 super.setText(underlineTextInHtml(text
));
58 myOriginalText
= text
;
61 @NonNls private String
underlineTextInHtml(final String text
) {
62 return "<html><u>" + text
+ "</u></html>";
65 public String
getOriginalText() {
66 return myOriginalText
;
69 private class MouseHandler
extends MouseAdapter
{
70 public void mouseClicked(MouseEvent e
) {
71 HyperlinkListener
[] listeners
= myListeners
.toArray(new HyperlinkListener
[myListeners
.size()]);
72 HyperlinkEvent event
= new HyperlinkEvent(HoverHyperlinkLabel
.this, HyperlinkEvent
.EventType
.ACTIVATED
, null);
73 for (int i
= 0; i
< listeners
.length
; i
++) {
74 HyperlinkListener listener
= listeners
[i
];
75 listener
.hyperlinkUpdate(event
);
79 public void mouseEntered(MouseEvent e
) {
80 HoverHyperlinkLabel
.super.setText(underlineTextInHtml(myOriginalText
));
81 setCursor(Cursor
.getPredefinedCursor(Cursor
.HAND_CURSOR
));
84 public void mouseExited(MouseEvent e
) {
85 HoverHyperlinkLabel
.super.setText(myOriginalText
);
86 setCursor(Cursor
.getDefaultCursor());
90 public void addHyperlinkListener(HyperlinkListener listener
) {
91 myListeners
.add(listener
);
94 public void removeHyperlinkListener(HyperlinkListener listener
) {
95 myListeners
.remove(listener
);