私が取り組んでいる Java プロジェクトでは、Java3d と Swing のツールチップの間で奇妙な競合が発生しています。
私たちのプログラムは、Swing JComponents (ボタン、スライダー、テキスト ボックスなど) に囲まれた中央の Java3D Canvas3D でセットアップされています。キーボードとマウスは 3D ワールド内を移動するために使用され、ボタンは他の操作を可能にします。
問題は、Swing コンポーネントからのツール ヒントがウィンドウ (JFrame) の外に出るたびに、Java3D の動きが遅くなり、途切れる大きな問題が発生することです。スイングでのヘビーウェイトとライトウェイトの混合に関して読んだすべての問題のため、それが問題である可能性が高いと想定しました。
私たちの最初の解決策は、各コンポーネントの getToolTipLocation() メソッドをオーバーライドして、ツールチップがウィンドウ内にとどまるようにすることでした。これはほとんど機能しているように見えましたが、ツールチップが奇妙な場所に残りました。さらに、プログラムが起動するとすぐに、ツールチップが生成される前に (20 ~ 30 回の起動ごとに) 吃音/速度低下の問題が発生することがあります。
それから昨日、私はそれを修正するためのこれまでにない奇妙な方法を発見しました. ツールチップの幅が 151 ピクセル以上である限り、ウィンドウの外に出る速度低下の問題は発生しません。幅が 150 ピクセル以下のツールチップは、ウィンドウから出るとすぐにスローダウン/カクつきの問題を引き起こします。使用する各タイプのコンポーネントで createToolTip () をオーバーライドすることにより、setPreferedSize() を呼び出して、すべてのツール ヒントの幅を 151 ピクセルにすることができます。もちろん、この回避策の問題は、すべてのツールチップに多くの空白スペースがあるか、切り捨てられることです。
この奇妙な動作の原因と、それを修正するために何ができるか、誰にもわかりませんか?