Quiero saber cómo podemos realizar una acción cuando se hace doble clic en el mouse en un componente.identificando doble clic en java
Respuesta
public void mouseClicked(MouseEvent event)
{
if (event.getClickCount() == 2) {
System.out.println("double clicked");
}
}
Suponiendo que quiere decir en Swing, asigna un MouseListener a su Componente:
addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
if(e.getClickCount()==2){
// your code here
}
}
});
Referencia:
- Java Tutorial: How to write a Mouse Listener
El e.getClickCount()==2
no es suficiente si desea permitir que sus usuarios hagan múltiples clics dobles en un breve retraso. Usted está limitado por la configuración del escritorio. Se puede conseguir examinado el resultado de Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");
Una buena manera de evitar el problema es no utilizar el cheque getClickCount()
sino utilizar un Timer
donde se puede elegir el máximo intervalo entre los clics y manejar por sí mismo la cuenta (muy simple).
El código asociado:
boolean isAlreadyOneClick;
@Override
public void mouseClicked(MouseEvent mouseEvent) {
if (isAlreadyOneClick) {
System.out.println("double click");
isAlreadyOneClick = false;
} else {
isAlreadyOneClick = true;
Timer t = new Timer("doubleclickTimer", false);
t.schedule(new TimerTask() {
@Override
public void run() {
isAlreadyOneClick = false;
}
}, 500);
}
}
Probado con Win XP OS y perfecto.
Uso inteligente de un 'Timer' para desarmar un indicador, más complejo que una comparación entre dos instantes pero más fácil de usar. El inconveniente que veo es: ¿dónde almacenar el 'isAlreadyOneClick'? Parece traer problemas mientras se resuelven entre sí. Esta solución también tendrá "agujeros" en su comportamiento si (imaginemos) que los clics se realizan muy rápidamente: cada vez que el 'Timer' restablecerá el indicador y solo en este momento, habrá un verdadero doble clic manejado. Además, creo que este método no es realmente GC y amigable con los recursos. – Benj
Hola Benj No consigo entender la relación entre el recolector de basura y la bandera. ¿Crees que la forma de proceder puede romper algo? Por favor, ¿podría precisar más su ejemplo y sus consecuencias? Lo siento, no veo lo que intenta mostrar. – davidxxx
Hay dos cosas que veo: 1/Es solo que cada vez que se ejecuta la parte "else", se creará un nuevo objeto 'Timer'. Me gustaría mover este temporizador como un campo del objeto para permitir su gestión desde otros lugares como el clic derecho o algo así. 2/Estos temporizadores desangrarán su doble clic cada 500ms, luego si tiene que hacer doble clic dos veces, hay posibilidades de que el último no funcione como se esperaba. – Benj
- 1. Distinguir entre un solo clic y doble clic en Java
- 2. Java: ignorar un solo clic con doble clic?
- 3. Resaltado con doble clic
- 4. Interceptar clic simple o doble del mouse - solo ejecutar doble clic en el código al hacer doble clic
- 5. Haga doble clic en la fila DataGridView?
- 6. ASP.Net haga doble clic en el problema
- 7. WPF ListBoxItem haga doble clic en?
- 8. Implementar doble clic para botón en Android
- 9. Evento de doble clic en android
- 10. reasignación NERDTree Doble clic en 'T'
- 11. ¿Existe un doble clic derecho en Win32?
- 12. NDK/JNI: identificando el hilo actual
- 13. Javafx 2 haga clic y haga doble clic
- 14. Ejecutando un Jar en Vista con un doble clic
- 15. Personas que hacen doble clic en todo en las páginas web ... jQuery doble clic en el problema
- 16. Identificando secuencias de números repetidos en R
- 17. gridview edit requiere hacer doble clic
- 18. WPF doble clic TreeViewItem Nodo filial
- 19. Animación jQuery: Ignorar haga doble clic
- 20. C# Listbox Elemento Doble clic Evento
- 21. Recibiendo el evento de doble clic
- 22. ¿Cómo evitar un doble clic usando jQuery?
- 23. Realización de un doble clic desde CGEventCreateMouseEvent()
- 24. java: evento de captura de doble clic en el icono en la bandeja
- 25. Java doble bloqueo bloqueado
- 26. Java comparación doble epsilon
- 27. .NET: haga doble clic en evento en TabControl
- 28. Haga doble clic en una fila NSTableView en Cocoa?
- 29. Hacer doble clic en un evento en el elemento JList
- 30. Manejar eventos de doble clic en elementos ListBox en C#
Probablemente también quiera marcar 'event.getButton() == MouseEvent.BUTTON1' para contar solo dos veces con el botón izquierdo del mouse. –