【问题标题】:Swing: How to create a custom JToolTip like widget that moves with the mouseSwing:如何创建一个自定义的 JToolTip 类随鼠标移动的小部件
【发布时间】:2011-10-31 14:54:29
【问题描述】:

Java Swing 问题。

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

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

【问题讨论】:

  • 这不是一件容易的事,我看到的所有例子都太长了,并且基于JComponent的Model + SwingUtilities + JWindow,也许有人有简单的想法

标签: java swing tooltip


【解决方案1】:

重写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);
    }
}

【讨论】:

  • 也许,但我从来没有看到工具提示在屏幕上飞/跟随鼠标,并且连接到鼠标光标 +1 下的 JComponent
  • 感谢非常好的示例,那么哪种方法更好选择 1) 使用 SwingUtilities 检查 JComponent,然后从一些预先准备好的数组中更改工具提示属性 2) 仅为预期的 JComponent 直接设置工具提示和在这种情况下,JComponet 将属性返回到工具提示
  • 如果您将组件添加到面板,那么您需要为每个组件添加一个工具提示。如果您正在绘制图像,则需要跟踪每个图像的形状并遍历所有形状以确定鼠标点的位置,然后为图像设置适当的工具提示。
  • 非常感谢。我希望用户能够将工具提示设置为可见或不可见。有什么方法可以控制何时显示工具提示?
猜你喜欢
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多