向 JTextPane 添加工具提示
我想仅向 JTextPane 内的特定文本添加一些工具提示。例如,如果 JTextPane 中有一个参考链接文本,我想向该文本添加一个工具提示以显示该链接。有什么办法可以实现这个功能吗?
I want to add some tooltips to only a certain text inside a JTextPane. As an example, if there is a reference link text inside the JTextPane I want to add a tooltip to that text to show the link. Is there any way I can achieve this functionality?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
好问题。
First Swing 支持 HTML,因此要显示带有链接的工具提示,您只需输入:
comp.setToolTipText("google");
问题在于使该工具提示可点击。
不幸的是,它不是由 Swing 本身完成的。
工具提示由 ToolTipManager 创建。当您调用 setToolTipText() 时,JComponent 将其自身实例添加到负责显示工具提示的工具提示管理器的共享实例(使用无法覆盖的方法
show()
)。您无法更改工具提示管理器本身因此,我建议的最佳解决方案是执行以下操作。
您可以使用 Toolkit.getDefaultToolkit().addAWTEventListener() 监听 AWT 事件,
因此,当显示工具提示时捕获它、发现并在其上添加鼠标侦听器。该鼠标侦听器将使工具提示本身可点击。
这是我刚刚写的练习。您可以将其用作参考。祝你好运。
Good question.
First Swing supports HTML, so to show tooltip with link you just have to say:
comp.setToolTipText("<html><a href='http://www.google.com'>google</a></html>");
The problem is making this tooltip clickable.
Unfortunately it is not done by Swing itself.
Tooltip is created by ToolTipManager. When you call setToolTipText() Jcomponent adds the instance of itself to shared instance of Tooltip manager that is responsible on showing the tooltip (using method
show()
that cannot be overridden. You cannot change the tooltip manager itself too.So, the best solution I can suggest is to do the following.
You can listen to the AWT events using
Toolkit.getDefaultToolkit().addAWTEventListener()
So, when tooltip is being showed catch it, discover, and add mouse listener on it. This mouse listener will make the tooltip itself clickable.
Here is the exercise I have just written. You can use it as a reference. Good luck.
覆盖:文本窗格的 getToolTipText(MouseEvent event) 方法。
使用 MouseEvent,您可以使用 viewToModel(...) 方法将offest放入文档中。然后,您可以获取属性来确定您是否将鼠标悬停在链接上。
或者也许更简单的方法是使用 getCursor() 方法。当光标为手形光标时,您位于链接上方。
然后您可以为当前链接返回适当的工具提示文本。
Override: getToolTipText(MouseEvent event) method of the text pane.
Using the MouseEvent you can use the viewToModel(...) method to get the offest into the Document. Then you can get the attributes to determine if you are hovering over a link.
Or maybe an easier approach is to use the getCursor() method. When the cursor is the hand cursor you are over a link.
Then you can return the appropriate tool tip text for the current link.
您可以尝试在 jtextpane 中加载 HTML 页面。 这里是一个示例。有关此示例的更多说明可以在 此处< /a>
You can try loading of HTML pages in the jtextpane. Here is an example. More explanation about this example can be found here
您可以将 TooltipText 添加到 JComponent(如 JTextPane),而不是添加到组件的单词或部分。
通常,JTextPane 可以包含多个链接,那么 TooltipText 应该显示哪个链接呢?
但是,如果检测到链接,您可以向 JTextPane 添加一个监听器,删除旧的工具提示,然后添加一个新的工具提示。
You can add a TooltipText to a JComponent, like a JTextPane, not to words or parts of the Component.
Normally a JTextPane can contain multiple links, so for which should the TooltipText show the link?
But you can add a Listener to the JTextPane, and remove the old Tooltip, and add a new one, if you detect a Link.