2011-06-09 16 views
4

我正在處理的Java項目在Java3d和Swing工具提示之間存在奇怪的衝突。Swing工具提示中的Java3D口吃問題

我們的程序使用Java3D Canvas3D在Swing JComponents(按鈕,滑塊,文本框等)包圍的中心進行安裝。鍵盤和鼠標用於在三維世界中移動,按鈕允許其他操作。

問題是,無論何時來自Swing組件的工具提示超出了我們的窗口(一個JFrame),Java3D中的移動都會慢慢爬行並導致嚴重的口吃問題。由於我們已經讀過關於鞦韆中重量級/輕量級混合的所有問題,我們認爲這可能是問題所在。

我們最初的解決方案是重寫每個組件getToolTipLocation()方法,以確保工具提示保留在我們的窗口內。這似乎主要工作,但它留下了奇怪的位置工具提示。另外,一旦程序啓動並且在生成任何工具提示(每20-30次啓動一次)之前,我們偶爾會遇到口吃/放慢問題。

然後昨天我發現了一個修復它的方法。只要工具提示寬度爲151像素或更大,它們不會導致窗外的放緩問題。任何寬度爲150像素或更小的工具提示只要離開窗口就會導致我們的速度減慢/口吃問題。通過在我們使用的每種類型的組件中重寫createToolTip(),我們可以調用setPreferedSize()並確保所有工具提示都是151像素寬。當然,這個解決方法的問題是所有的工具提示都有很多空格或被截斷。

有沒有人有任何想法可能會導致這種奇怪的行爲,我可以嘗試解決它?

回答

0

爲了解決重量級/輕質混合問題,我總是選擇下列關於JPopupMenu中和工具提示設置:

import javax.swing.JPopupMenu; 
import javax.swing.ToolTipManager; 

ToolTipManager ttManager = ToolTipManager.sharedInstance(); 
ttManager.setEnabled(true); 
ttManager.setLightWeightPopupEnabled(false); 

JPopupMenu.setDefaultLightWeightPopupEnabled(false); 

你有沒有實現這個呢?還是它有幫助?

月,InteractiveMesh

+0

是的,我們都試過,沒有明顯的變化都啓用和禁用輕量級彈出窗口。 – kwaegel 2011-06-10 18:47:25