Проблема с заиканием в Java3D с подсказками Swing - PullRequest
4 голосов
/ 10 июня 2011

Java-проект, над которым я работаю, имеет странный конфликт между подсказками Java3d и Swing.

Наша программа настроена на Java3D Canvas3D в центре, окруженном компонентами Swing J (кнопки, ползунки, текстовые поля и т. П.). Клавиатура и мышь используются для перемещения по трехмерному миру, а кнопки позволяют выполнять другие манипуляции.

Проблема в том, что всякий раз, когда всплывающая подсказка от компонентов Swing выходит за пределы нашего окна (JFrame), движение в Java3D замедляется до ползания и вызывает серьезные проблемы с заиканием. Из-за всех проблем, о которых мы читали в отношении смешивания в супертяжелом / легком весе в колебании, мы предположили, что это может быть проблемой.

Наше первоначальное решение заключалось в переопределении каждого метода getToolTipLocation (), чтобы подсказки оставались внутри нашего окна. Казалось, это в основном работает, но подсказки остались в нечетных местах. Кроме того, мы иногда получаем проблему заикания / замедления, как только программа запускается и до того, как будут сгенерированы какие-либо подсказки (каждые 20-30 запусков).

Тогда вчера я обнаружил странный способ исправить это. Пока подсказки имеют ширину 151 пиксель или более, они не вызывают проблемы замедления, выходящей за пределы окна. Любая всплывающая подсказка шириной 150 пикселей или меньше вызывает нашу проблему замедления / заикания, как только она покидает окно. Переопределив метод createToolTip () в каждом используемом нами типе компонента, мы можем вызвать setPreferedSize () и убедиться, что все всплывающие подсказки имеют ширину 151 пиксель. Конечно, проблемы с этим обходным решением состоят в том, что во всех подсказках либо много пустого пространства, либо они усечены.

Кто-нибудь знает, что может быть причиной этого странного поведения и что я могу попытаться исправить?

1 Ответ

0 голосов
/ 10 июня 2011

Чтобы решить проблемы смешивания в тяжелом / легком весе, я всегда выбираю следующие настройки, касающиеся JPopupMenu и ToolTip:

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

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

JPopupMenu.setDefaultLightWeightPopupEnabled(false);

Ты это тоже реализовал? Или это помогает?

Август, InteractiveMesh

...