将工具提示添加到JTextPane

时间:2011-07-03 06:40:13

标签: java tooltip jtextpane

我想在JTextPane中只添加一些工具提示。例如,如果JTextPane中有引用链接文本,我想在该文本中添加工具提示以显示链接。有什么方法可以实现这个功能吗?

4 个答案:

答案 0 :(得分:8)

好问题。

First Swing支持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);
    }

答案 1 :(得分:6)

覆盖:文本窗格的getToolTipText(MouseEvent event)方法。

使用MouseEvent,您可以使用viewToModel(...)方法将offest放入Document中。然后,您可以获取属性以确定您是否将鼠标悬停在链接上。

或者更简单的方法是使用getCursor()方法。当光标是手形光标时,你就是一个链接。

然后,您可以返回当前链接的相应工具提示文本。

答案 2 :(得分:2)

您可以尝试在jtextpane中加载HTML页面。 Here就是一个例子。有关此示例的更多说明可以在here

找到

答案 3 :(得分:1)

您可以将TooltipText添加到JComponent(如JTextPane),而不是组件的单词或部分。

通常,JTextPane可以包含多个链接,因此TooltipText应该显示哪个链接?

但是,如果检测到链接,则可以向JTextPane添加监听器,并删除旧的工具提示,并添加新的工具提示。