Nuw*_*wan 10 java jtextpane tooltip
我想在JTextPane中只添加一些工具提示.例如,如果JTextPane中有引用链接文本,我想在该文本中添加工具提示以显示链接.有什么方法可以实现这个功能吗?
好问题.
First Swing支持HTML,因此要显示带有链接的工具提示,您只需说:
comp.setToolTipText("<html><a href='http://www.google.com'>google</a></html>");
问题是使此工具提示可单击.
不幸的是,它不是由Swing本身完成的.
工具提示由ToolTipManager创建.当您调用setToolTipText()时,Jcomponent会将自身实例添加到负责显示工具提示的Tooltip管理器的共享实例中(使用show()无法覆盖的方法.您也无法更改工具提示管理器本身.
因此,我建议的最佳解决方案是执行以下操作.您可以使用听取AWT事件Toolkit.getDefaultToolkit().addAWTEventListener()
因此,当显示工具提示时,抓住它,发现并在其上添加鼠标监听器.此鼠标侦听器将使工具提示本身可单击.
这是我刚刚写的练习.您可以将其用作参考.祝好运.
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);
}
Run Code Online (Sandbox Code Playgroud)
覆盖:文本窗格的getToolTipText(MouseEvent event)方法.
使用MouseEvent,您可以使用viewToModel(...)方法将offest输入到Document中.然后,您可以获取属性以确定您是否将鼠标悬停在链接上.
或者更简单的方法是使用getCursor()方法.当光标是手形光标时,您将通过链接.
然后,您可以返回当前链接的相应工具提示文本.
| 归档时间: |
|
| 查看次数: |
3053 次 |
| 最近记录: |