tiempo - reloj alarma java
Establecer el tiempo de demora de información sobre herramientas para un componente particular en Java Swing (3)
Estoy tratando de establecer información sobre herramientas en un JEditorPane
. El método que utilizo para determinar qué texto de información sobre herramientas mostrar es bastante intensivo en la CPU, por lo que me gustaría mostrarlo solo después de que el mouse se haya detenido por un corto período de tiempo, digamos 1 segundo.
Sé que puedo usar ToolTipManager.sharedInstance().setInitialDelay()
, sin embargo, esto establecerá el tiempo de demora para la información sobre herramientas en todos los componentes de swing a la vez y no quiero esto.
Bueno, recomendaría hacer la tarea intensiva de la CPU en otra secuencia para que no interrumpa las tareas normales de la GUI.
Esa sería una mejor solución. (en lugar de tratar de eludir el problema)
* Editar * Posiblemente pueda calcular los tootips para cada palabra en el JEditorPane
y almacenarlos en un Map
. Entonces, todo lo que tendrías que hacer es acceder al tootip del Map
si cambia.
Lo ideal es que las personas no muevan el mouse y tipeen al mismo tiempo. Entonces, puede calcular los tootlips cuando el texto cambia, y simplemente sacarlos del Map
en mouseMoved()
.
Puede mostrar la ventana emergente usted mismo. Escuche los eventos mouseMoved (), inicie / pare el temporizador y luego muestre el popup con el siguiente código:
Primero necesita PopupFactory, Popup y ToolTip:
private PopupFactory popupFactory = PopupFactory.getSharedInstance();
private Popup popup;
private JToolTip toolTip = jEditorPane.createToolTip();
luego, para mostrar u ocultar la información sobre herramientas:
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();
}
Esto le dará un retraso ajustable y muchos problemas :)
Si lo que quieres es hacer que la información sobre herramientas descarte demoras mucho más largas para un componente específico, entonces este es un buen truco:
(felicitaciones a la tecnología en 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);
}
});