web-dev-qa-db-ja.com

Java Swingで特定のコンポーネントのツールチップ遅延時間を設定します

JEditorPaneにツールチップを設定しようとしています。表示するツールチップテキストを決定するために使用する方法は、CPUにかなり負荷がかかるため、マウスが短時間停止した後、たとえば1秒後にのみ表示したいと思います。

ToolTipManager.sharedInstance().setInitialDelay()を使用できることはわかっていますが、これにより、すべてのSwingコンポーネントのツールチップの遅延時間が一度に設定されるため、これは望ましくありません。

25
Scottm

通常のGUIタスクが中断されないように、CPUを集中的に使用するタスクを別のスレッドで実行することをお勧めします。

それはより良い解決策になるでしょう。 (問題を回避しようとする代わりに)

* Edit *JEditorPane内のすべての単語のtootipsを計算し、それらをMapに保存することができます。次に、変更された場合はMapからtootipにアクセスするだけです。

理想的には、人々はマウスの移動と入力を同時に行わないでしょう。したがって、テキストが変更されたときにトゥートリップを計算し、mouseMoved()Mapからプルすることができます。

7
jjnguy

特定のコンポーネントのツールチップの却下遅延をはるかに長くすることが必要な場合、これは素晴らしいハックです。

(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);
  }
});
28
Noel Grandin

ポップアップを自分で表示できます。 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();
}

これはあなたに調整可能な遅延と多くのトラブルを与えるでしょう:)

5
Denis Tulskiy