Установите время задержки всплывающей подсказки для отдельного компонента в Java Swing
Я пытаюсь установить всплывающие подсказки на JEditorPane
. Метод, который я использую, чтобы определить, какой текст всплывающей подсказки показан достаточно интенсивно, - и поэтому я хотел бы показать его только после того, как мышь остановилась на короткое время - скажем 1 секунду.
Я знаю, что могу использовать ToolTipManager.sharedInstance().setInitialDelay()
, но это установит время задержки для всплывающих подсказок на всех компонентах swing сразу, и я не хочу этого.
Ответы
Ответ 1
Ну, я бы рекомендовал делать задачу с интенсивным процессором в другом потоке, чтобы он не прерывал обычные задачи графического интерфейса.
Это было бы лучшим решением. (вместо того, чтобы пытаться обойти проблему)
* Редактировать *. Вы могли бы рассчитать изотопы для каждого слова в JEditorPane
и сохранить их в Map
. Тогда все, что вам нужно сделать, это получить доступ к tootip из Map
, если он изменится.
В идеале люди не будут перемещать мышь и печатать одновременно. Таким образом, вы можете рассчитать тонопки, когда текст изменится, и просто вытащите их из Map
на mouseMoved()
.
Ответ 2
Если вы хотите, чтобы всплывающая подсказка упускала задержку намного дольше для определенного компонента, тогда это хороший хак:
(kudos to 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);
}
});
Ответ 3
Вы можете показать всплывающее окно самостоятельно. Слушайте события 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();
}
Это даст вам регулируемую задержку и массу проблем:)