Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向JTextPane添加工具提示_Java_Tooltip_Jtextpane - Fatal编程技术网

Java 向JTextPane添加工具提示

Java 向JTextPane添加工具提示,java,tooltip,jtextpane,Java,Tooltip,Jtextpane,我只想在JTextPane中的特定文本中添加一些工具提示。例如,如果JTextPane中有一个参考链接文本,我想在该文本中添加一个工具提示来显示该链接。有什么方法可以实现此功能吗?您可以尝试在jtextpane中加载HTML页面。这就是一个例子。有关此示例的更多说明,请参见您可以将TooltipText添加到JComponent,如JTextPane,而不是添加到组件的单词或部分 通常一个JTextPane可以包含多个链接,那么TooltipText应该为哪个显示链接 但是,如果检测到链接,可以

我只想在JTextPane中的特定文本中添加一些工具提示。例如,如果JTextPane中有一个参考链接文本,我想在该文本中添加一个工具提示来显示该链接。有什么方法可以实现此功能吗?

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

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

通常一个JTextPane可以包含多个链接,那么TooltipText应该为哪个显示链接

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

好问题

First Swing支持HTML,所以要显示带有链接的工具提示,您只需说:

comp.setToolTiptText(“”)

问题在于使此工具提示可单击

不幸的是,它不是由Swing本身完成的

工具提示由ToolTimManager创建。调用setToolTipText()Jcomponent时,组件会将自身的实例添加到工具提示管理器的共享实例中,该实例负责显示工具提示(使用无法重写的方法
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);
    }
publicstaticvoidmain(String[]args)抛出InterruptedException、InvocationTargetException{
最终JFrame f=新JFrame(“测试”);
f、 设置大小(100100);
JLabel=新的JLabel(“”);
l、 setToolTipText(“”);
长掩码=AWTEvent.COMPONENT\u事件\u掩码|
//AWTEvent.CONTAINER\u事件\u掩码|
//AWTEvent.FOCUS\u事件\u掩码|
//AWTEvent.KEY\u事件\u掩码|
//AWTEvent.MOUSE\u事件\u掩码|
//AWTEvent.MOUSE\u MOTION\u EVENT\u MASK|
AWTEvent.WINDOW\u事件\u掩码|
AWTEvent.ACTION\u事件\u掩码|
AWTEvent.ADJUSTMENT\u事件\u掩码|
awteEvent.ITEM\u事件\u掩码|
AWTEvent.TEXT\u事件\u掩码;
Toolkit.getDefaultToolkit().addAWTEventListener(新的AWTEventListener()文件){
@凌驾
已调度的公共void事件(AWTEvent事件){
int id=event.getID();
Object source=event.getSource();
if(id==101&&JToolTip的源实例){
JToolTip工具提示=(JToolTip)源;
//System.out.println(“+event.getID()+”+event.getSource());
}
}
},面罩);
f、 加(l);
f、 setVisible(真);
}
覆盖:文本窗格的GetToolTiptText(MouseeEvent事件)方法

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

或者更简单的方法是使用getCursor()方法。当光标是手动光标时,您位于链接上方

然后可以为当前链接返回适当的工具提示文本