【发布时间】:2014-07-07 01:31:35
【问题描述】:
类似于ToolTip flicker in Java if outside JFrame?的Q
不断更新的轻量级工具提示可以正常工作,但一旦它移出窗口边界或成为重量级(通过禁用轻量级弹出窗口),它就会变成闪烁城市。
尝试了在窗口内工作的“-Dsun.awt.noerasebackground=true”提示,但代价是其他组件上的一些绘画伪影(此示例只是一个空白面板)。在窗口范围之外它没有帮助,仍然有可怕的闪烁量。
有人知道如何解决这个问题吗?还是目前不可能?
示例在此代码中 -->
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.ToolTipManager;
public class JTooltipFlickerTest extends JFrame {
JPanel panel;
static public void main (final String[] args) {
new JTooltipFlickerTest ();
}
public JTooltipFlickerTest () {
super ();
//ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false);
//ToolTipManager.sharedInstance().setReshowDelay(0);
setTitle (this.getClass().toString());
setSize (1024, 768);
this.getContentPane().setLayout (new BorderLayout());
SwingUtilities.invokeLater (
new Runnable () {
@Override
public void run() {
panel = new JPanel ();
final MouseAdapter ma = new MouseAdapter () {
public void mouseMoved (final MouseEvent e) {
panel.setToolTipText ("x: "+e.getX()+", y: "+e.getY());
}
};
panel.addMouseMotionListener(ma);
//panel.setDoubleBuffered(true);
//panel.createToolTip().setDoubleBuffered(true);
JTooltipFlickerTest.this.getContentPane().add (panel, "Center");
JTooltipFlickerTest.this.setVisible (true);
}
}
);
}
}
【问题讨论】: