Paramétrer le délai Tooltip pour un composant particulier dans Java Swing

j'essaie de mettre des tooltips sur un JEditorPane. La méthode que j'utilise pour déterminer quel texte tooltip afficher est assez intensif CPU - et donc je voudrais le montrer seulement après que la souris a arrêté pendant une courte période de temps - disons 1 seconde.

je sais que je peux utiliser ToolTipManager.sharedInstance().setInitialDelay(), cependant cela va régler le délai pour les tooltips sur tous les composants swing à la fois et je ne veux pas de cela.

24
demandé sur SwiftArchitect 2009-07-27 23:55:44

3 réponses

Eh bien, je recommande de faire la tâche intensive CPU sur un autre thread pour qu'il n'interrompe pas les tâches GUI normales.

ce serait une meilleure solution. (au lieu d'essayer de contourner le problème)

*Edit* vous pourriez éventuellement calculer les totips pour chaque mot dans le JEditorPane et de les stocker dans un Map. Alors tout ce que vous avez à faire est d'accéder au totip à partir de la Map si ça change.

idéalement, les gens ne bougeront pas la souris et taper en même temps. Ainsi, vous pouvez calculer les tootlips quand le texte change, et juste les tirer du MapmouseMoved().

7
répondu jjnguy 2009-07-27 20:15:09

si ce que vous voulez est de faire le tooltip rejeter le retard beaucoup plus longtemps pour un composant spécifique, alors c'est un bon hack:

(bravo à tech à 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);
  }
});
25
répondu Noel Grandin 2014-11-22 10:11:33

vous pouvez montrer le popup vous-même. Pour écouter mouseMoved (), démarrer/arrêter la minuterie et de montrer ensuite popup avec le code suivant:

tout d'abord, vous avez besoin de PopupFactory, Popup, et ToolTip:

private PopupFactory popupFactory = PopupFactory.getSharedInstance();
private Popup popup;
private JToolTip toolTip = jEditorPane.createToolTip();

alors, pour afficher ou masquer le toolTip:

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

Cela vous donnera réglable de retard et beaucoup de problèmes :)

4
répondu Denis Tulskiy 2009-07-28 07:01:02