当前显示的动态更新工具提示

当前显示的动态更新工具提示,第1张

当前显示的动态更新工具提示

实际上,即使在两次调用之间将工具提示重置为null时,它也不会自我更新。

到目前为止,我发现的唯一技巧是模拟鼠标移动事件并将其转发到TooltipManager上。这使他认为鼠标已移动并且必须重新放置工具提示。不漂亮,但是效率很高。

看一下这个演示代码,它以百分比显示从0到100的进度:

import java.awt.MouseInfo;import java.awt.Point;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import javax.swing.Jframe;import javax.swing.JLabel;import javax.swing.SwingUtilities;import javax.swing.Timer;import javax.swing.ToolTipManager;public class TestTooltips {    protected static void initUI() {        Jframe frame = new Jframe("test");        final JLabel label = new JLabel("Label text");        frame.add(label);        frame.pack();        frame.setVisible(true);        Timer t = new Timer(1000, new ActionListener() { int progress = 0; @Override public void actionPerformed(ActionEvent e) {     if (progress > 100) {         progress = 0;     }     label.setToolTipText("Progress: " + progress + " %");     Point locationOnScreen = MouseInfo.getPointerInfo().getLocation();     Point locationOnComponent = new Point(locationOnScreen);     SwingUtilities.convertPointFromScreen(locationOnComponent, label);     if (label.contains(locationOnComponent)) {         ToolTipManager.sharedInstance().mouseMoved(      new MouseEvent(label, -1, System.currentTimeMillis(), 0, locationOnComponent.x, locationOnComponent.y,   locationOnScreen.x, locationOnScreen.y, 0, false, 0));     }     progress++; }        });        t.start();    }    public static void main(String[] args) {        SwingUtilities.invokeLater(new Runnable() { @Override public void run() {     initUI(); }        });    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5506094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存