Swing:如何创建一个随鼠标移动的自定义JToolTip

时间:2011-08-21 14:40:43

标签: java swing tooltip

Java Swing问题。

我有一个显示图表的JPanel。当我将鼠标移到此图表上时,我希望某些信息显示在随鼠标移动的类似工具提示的小部件上。我怎样才能最好地实现这个目标?

如果我知道如何将自定义JComponent完全放在充当我的绘图画布的JPanel中,我想我的问题将会解决。然后我可以捕获鼠标移动事件并重新定位/更新小部件。任何其他解决方案(包括可能直接使用JToolTip)也将非常受欢迎!

如果这个问题有点基础,请道歉。自从我上次使用Swing以来已经很长时间了,所以我还在重新学习如何使用它。非常感谢提前!

1 个答案:

答案 0 :(得分:8)

重写getToolTipText(MouseEvent)方法,根据鼠标位置动态设置工具提示。

编辑:

如果您希望工具提示随着鼠标不断移动,那么您还需要覆盖getToolTipLocation()方法。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ToolTipPanel extends JPanel
{
    public ToolTipPanel()
    {
        setPreferredSize( new Dimension(200, 200) );
        setToolTipText("");
    }

    public void paintComponent(Graphics g)
    {
        g.setColor( Color.red );
        g.fillRect(0, 0, 100, 200);
        g.setColor( Color.blue );
        g.fillRect(100, 0, 100, 200);
    }

    public String getToolTipText(MouseEvent e)
    {
        if (e.getX() < 100)
            return "red";
        else
            return "blue";
    }

    public Point getToolTipLocation(MouseEvent e)
    {
        Point p = e.getPoint();
        p.y += 15;
        return p;
//      return super.getToolTipLocation(e);
    }

    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.getContentPane().add( new ToolTipPanel() );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
}