JEditorPane
にツールチップを設定しようとしています。表示するツールチップテキストを決定するために使用する方法は、CPUにかなり負荷がかかるため、マウスが短時間停止した後、たとえば1秒後にのみ表示したいと思います。
ToolTipManager.sharedInstance().setInitialDelay()
を使用できることはわかっていますが、これにより、すべてのSwingコンポーネントのツールチップの遅延時間が一度に設定されるため、これは望ましくありません。
通常のGUIタスクが中断されないように、CPUを集中的に使用するタスクを別のスレッドで実行することをお勧めします。
それはより良い解決策になるでしょう。 (問題を回避しようとする代わりに)
* Edit *JEditorPane
内のすべての単語のtootipsを計算し、それらをMap
に保存することができます。次に、変更された場合はMap
からtootipにアクセスするだけです。
理想的には、人々はマウスの移動と入力を同時に行わないでしょう。したがって、テキストが変更されたときにトゥートリップを計算し、mouseMoved()
のMap
からプルすることができます。
特定のコンポーネントのツールチップの却下遅延をはるかに長くすることが必要な場合、これは素晴らしいハックです。
(kudos to tech at http://tech.chitgoks.com/2010/05/31/disable-tooltip-delay-in-Java-swing/ )
private final int defaultDismissTimeout = ToolTipManager.sharedInstance().getDismissDelay();
addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent me) {
ToolTipManager.sharedInstance().setDismissDelay(60000);
}
public void mouseExited(MouseEvent me) {
ToolTipManager.sharedInstance().setDismissDelay(defaultDismissTimeout);
}
});
ポップアップを自分で表示できます。 mouseMoved()イベントをリッスンし、タイマーを開始/停止してから、次のコードでポップアップを表示します。
まず、PopupFactory、Popup、およびToolTipが必要です。
private PopupFactory popupFactory = PopupFactory.getSharedInstance();
private Popup popup;
private JToolTip toolTip = jEditorPane.createToolTip();
次に、ツールチップを表示または非表示にするには:
private void showToolTip(MouseEvent e) {
toolTip.setTipText(...);
int x = e.getXOnScreen();
int y = e.getYOnScreen();
popup = popupFactory.getPopup(jEditorPane, toolTip, x, y);
popup.show();
}
private void hideToolTip() {
if (popup != null)
popup.hide();
}
これはあなたに調整可能な遅延と多くのトラブルを与えるでしょう:)