2011-07-03 16 views
10

JTextPane内の特定のテキストのみにツールチップを追加したいとします。たとえば、JTextPane内に参照リンクテキストがある場合、そのテキストにツールチップを追加してリンクを表示したいとします。この機能を実現する方法はありますか?JTextPaneにツールチップを追加する

答えて

8

良い質問です。

第1揺動はそうあなただけ言っているリンクをツールチップを表示するには、HTMLをサポートしています。

comp.setToolTipText("<html><a href='http://www.google.com'>google</a></html>");

問題は、このツールチップのクリック可能になっています。

残念ながら、それはSwing自体では行われません。

ツールチップはToolTipManagerによって作成されます。 setToolTipText()を呼び出すと、Jcomponentはツールヒントの表示を担当するTooltipマネージャの共有インスタンスに自身のインスタンスを追加します(メソッドshow()を使用して上書きできません)。

したがって、私が提案できる最善の解決策は、以下のことを行うことです。 あなたはツールチップが、それは、発見し、その上にマウスリスナーを追加し、キャッチを示しているときにToolkit.getDefaultToolkit().addAWTEventListener()

ので、このマウスリスナーを行います使用してAWTイベントに耳を傾けることができますツールチップ自体はクリック可能です

ここでは私が書いた練習問題ですそれを参考にしてください。がんばろう。

public static void main(String[] args) throws InterruptedException, InvocationTargetException { 
     final JFrame f = new JFrame("test"); 
     f.setSize(100, 100); 


     JLabel l = new JLabel("<html><a href='http://www.google.com'>google</a></html>"); 
     l.setToolTipText("<html><a href='http://www.google.com'>google</a></html>"); 


     long mask = AWTEvent.COMPONENT_EVENT_MASK | 
//  AWTEvent.CONTAINER_EVENT_MASK | 
//  AWTEvent.FOCUS_EVENT_MASK | 
//  AWTEvent.KEY_EVENT_MASK | 
//  AWTEvent.MOUSE_EVENT_MASK | 
//  AWTEvent.MOUSE_MOTION_EVENT_MASK | 
     AWTEvent.WINDOW_EVENT_MASK | 
     AWTEvent.ACTION_EVENT_MASK | 
     AWTEvent.ADJUSTMENT_EVENT_MASK | 
     AWTEvent.ITEM_EVENT_MASK | 
     AWTEvent.TEXT_EVENT_MASK; 

     Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { 
      @Override 
      public void eventDispatched(AWTEvent event) { 
       int id = event.getID(); 
       Object source = event.getSource(); 
       if (id == 101 && source instanceof JToolTip) { 
        JToolTip tooltip = (JToolTip)source; 

        //System.out.println("" + event.getID() + " " + event.getSource()); 

       } 

      } 
     }, mask); 
     f.add(l); 
     f.setVisible(true); 
    } 
2

jtextpaneでHTMLページを読み込めます。 Hereがその例です。この例の詳しい説明はこちらhere

1

JTextPaneのように、コンポーネントの単語や部分ではなく、JComponentにToolTipTextを追加できます。

通常、JTextPaneには複数のリンクが含まれる可能性があります。そのため、TooltipTextはリンクを表示する必要がありますか?

しかし、JTextPaneにリスナーを追加して、リンクを検出した場合は、古いツールチップを削除して新しいツールチップを追加することができます。

6

オーバーライド:テキスト区画のgetToolTipText(MouseEventイベント)メソッド。

MouseEventを使用すると、viewToModel(...)メソッドを使用してドキュメントに不快感を与えることができます。次に、属性を取得して、リンク上をホバリングしているかどうかを判断できます。

さらに簡単な方法は、getCursor()メソッドを使用することです。カーソルがハンドカーソルのとき、あなたはリンク上にいる。

次に、現在のリンクの適切なツールヒントテキストを返すことができます。

関連する問題