類似Q可ToolTip flicker in Java if outside JFrame?可能停止在重量級模式中閃爍的java工具提示?
一個不斷更新的輕量級工具提示正常,但一旦它移出窗口範圍或由重量級(禁用輕量級彈出窗口),這是閃爍的城市。
嘗試了「-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);
}
}
);
}
}
mmm ...我沒有看到任何區別。我發現的是,工具提示和彈出窗口被設置爲不是真正的雙緩衝,即硬件雙緩衝 - 類的設置方式意味着這不能通過子類化等改變。 – mgraham 2011-04-06 10:03:11
@mgraham:當啓用installRepaintManager()時,與面板重疊的工具提示區域的部分不會閃爍;另一部分閃爍。當'installRepaintManager()'被禁用時,整個工具提示會閃爍。這是一個微妙的差異,我猜它沒有什麼值得期待的。至少,當啓用'installRepaintManager()'時,工具提示區域中的單詞有點清晰。 – eee 2011-04-06 16:48:03
是的,我現在可以看到。我可以用一個包含JTooltip的未修飾JFrame製作一個假的工具提示,我可以忽略閃爍在整個屏幕上移動,所以它似乎特別針對工具提示使用的HeavyWeightPopup類......懷疑真正的雙緩衝警告...... 這對我來說更糟,因爲我使用多行HTML工具提示,因此閃爍非常糟糕...... +我想爲工具提示使用半透明的重量級窗口,以便即使在組件中也會出現閃爍。 我會給你一個upvote或任何嘗試,但我不允許缺乏以前的帖子... – mgraham 2011-04-06 21:43:00