2301_78804227 2024-04-04 11:49 采纳率: 57.1%
浏览 6
已结题

JAVA的Tooltip如何固定位置

我想让ToolTip固定显示的位置,在鼠标进入后显示,离开后消失
目前不知道如何固定ToolTip位置,哪位有办法啊

        lf1 = CustomButton.createCustomButton("photo.svg");
        lf2 = CustomButton.createCustomButton("album.svg");
        lf1.setToolTipText("图片");
        lf2.setToolTipText("相册");

  • 写回答

5条回答 默认 最新

  • 生瓜蛋子 2024-04-04 11:52
    关注

    在不同的UI框架中,实现工具提示(ToolTip)固定显示位置的方法略有不同。如果你是在Java Swing或者JavaFX中工作,你可以通过设置ToolTip的属性来控制其显示位置。而在Web前端开发中,通过CSS配合JavaScript/jQuery等方式也能实现类似的功能。以下分别给出两种常见情况下的示例:

    Java Swing 中的解决方案:

    Swing 提供了 JComponent.setToolTipText(String tipText) 方法来添加工具提示文本,但它默认的位置是动态的。要固定工具提示的位置,你需要创建自定义的 JToolTip 类并重写其中的方法来定位它。以下是一个简单的示例:

    import javax.swing.*;
    import javax.swing.event(MouseEvent;
    import javax.swing.plaf.ToolTipUI;
    import java.awt.*;
    
    public class FixedLocationToolTip extends JToolTip {
        private Point fixedLocation;
    
        public void setFixedLocation(Point p) {
            this.fixedLocation = p;
        }
    
        @Override
        public Point getToolTipLocation(MouseEvent event) {
            // 返回固定的坐标而不是鼠标位置
            return fixedLocation != null ? fixedLocation : super.getToolTipLocation(event);
        }
    }
    
    // 在组件上设置自定义的JToolTip
    JButton lf1 = new JButton();
    lf1.setToolTipText("图片");
    
    JButton lf2 = new JButton();
    lf2.setToolTipText("相册");
    
    // 创建并关联自定义的JToolTip
    JToolTip customToolTip1 = new FixedLocationToolTip();
    customToolTip1.setFixedLocation(new Point(x, y)); // x, y为你想要固定的位置
    lf1.createToolTip(customToolTip1);
    
    JToolTip customToolTip2 = new FixedLocationToolTip();
    customToolTip2.setFixedLocation(new Point(x2, y2));
    lf2.createToolTip(customToolTip2);
    

    Web前端开发中的解决方案:

    在Web前端,HTML和CSS结合JavaScript(如jQuery)可以实现这样的功能。一个简单的实现方式是创建一个绝对定位的元素作为tooltip,并通过JavaScript监听鼠标事件来控制它的显示和隐藏。以下是一个基本的jQuery示例:

    $(document).ready(function() {
        var $lf1 = $('#lf1'); // 假设lf1是对应按钮的ID
        var $lf2 = $('#lf2'); // 假设lf2是对应按钮的ID
        var $tooltip = $('<div id="tooltip"></div>').appendTo('body').hide(); // 创建tooltip DOM元素并附加到body上
    
        function showTooltip(target, text, position) {
            $tooltip.text(text).css({
                'top': position.top,
                'left': position.left
            }).show();
        }
    
        function hideTooltip() {
            $tooltip.hide();
        }
    
        $lf1.hover(function() {
            var offset = $lf1.offset();
            showTooltip($lf1, "图片", { top: offset.top + $lf1.outerHeight(), left: offset.left });
        }, function() {
            hideTooltip();
        });
    
        $lf2.hover(function() {
            var offset = $lf2.offset();
            showTooltip($lf2, "相册", { top: offset.top + $lf2.outerHeight(), left: offset.left });
        }, function() {
            hideTooltip();
        });
    });
    

    在这个示例中,$lf1$lf2 是两个按钮元素,$tooltip 是一个全局的tooltip元素,当鼠标悬停在按钮上时,tooltip会显示在按钮下方,并且位置可以通过传入的坐标固定。

    请根据你实际使用的UI框架和技术栈调整上述代码。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月28日
  • 已采纳回答 4月20日
  • 创建了问题 4月4日