实际上,即使在两次调用之间将工具提示重置为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(); } }); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)