2008-12-15 8 views
17

Anticipant le jour où les interfaces multi-touch deviennent plus envahissantes, existe-t-il des bibliothèques en Java qui peuvent être utilisées pour développer des applications tactiles? Je suis à la recherche d'interfaces similaires à MouseListener/MouseMotionListener/MouseWheelListener.Comment développer des applications multi-touch en Java?

Répondre

9

Le projet MT4j a tout ce dont vous avez besoin pour développer des applications multitouch en java. Tous les gestes multitouch bien connus sont déjà intégrés et peuvent être consultés en tant que simples en écoutant des événements de la souris (par exemple: component.addGestureListener (..)). Il dispose également d'un graphe de scène accéléré par le matériel, similaire à JavaFX. Vous pouvez même simuler une entrée multitouch en connectant une ou plusieurs souris à votre machine. Check it out à http://www.mt4j.org

+0

Est-ce que MT4j permet au développeur de créer de nouveaux gestes multitouch, en plus de ceux intégrés? Pas immédiatement apparent de la liste des fonctionnalités MT4j sur la page Web. –

+0

Oui, MT4j permet certainement de créer de nouveaux gestes multitouch car c'est une exigence très importante pour les applications multitouch. Tout ce que vous avez à faire est de créer un nouveau processeur d'entrée et de l'enregistrer avec un composant. Des tutoriels montrant comment faire cela seront bientôt disponibles. Jusque-là, vous pouvez regarder le code source des gestes existants. –

+0

MT4j a l'air génial - malheureusement c'est la GPL et donc pas adapté pour les applications commerciales. – hendrik

5

Sparsh est toujours dans mes marque-pages depuis la dernière fois que j'étudiais des solutions Java multitouch.

Bien que n'étant pas aussi simple que l'écouteur de souris typique ou l'écouteur de clic, il fournit toujours une interface raisonnable.

Vous avez besoin de votre classe d'écoute pour implémenter sparshui.client.Client, ce qui nécessite la définition de la méthode .

public void processEvent(int groupID, Event event) { 

     if(event instanceof TouchEvent) { 
      TouchEvent e = (TouchEvent)event; 
      if(e.getState() == TouchState.BIRTH) { 
       //do initial touch stuff 
      } else if(e.getState() == TouchState.MOVE) { 
       //do dragging stuff 
      } 
     } 
     else if(event instanceof DragEvent) { 
      DragEvent e = (DragEvent)event; 
      //do DragEvent specific stuff 
     } else if(event instanceof RotateEvent) { 
      RotateEvent e = (RotateEvent)event; 
      //do RotateEvent specific stuff 
     } else if(event instanceof ZoomEvent) { 
      ZoomEvent e = (ZoomEvent)event; 
      //do ZoomEvent specific stuff 
     } 
     //several other gesture types.... 
} 

Après cela, vous devez démarrer le serveur de reconnaissance gestuelle, en passant dans votre composant

new ServerConnection("localhost", objectImplementingClientInterface); 

En regardant les exemples de code sur le site devrait vous donner une assez bonne idée du cadre.

+3

Ouch ... vraiment, vous devez 'instanceOf' les événements? Ils ne fournissent pas de callback comme, processDragEvent, processZoomEvent, etc? –

+0

Pour autant que je sache, ils ne prennent en charge qu'un appel générique "processEvent" car vous pouvez ajouter des mouvements personnalisés qui ne sont pas natifs du framework. Cela fournit cette extensibilité sans avoir à modifier le code du framework. –

0

Je travaille principalement dans le traitement et la conception de mon interface utilisateur à partir de zéro. J'ai cherché une solution qui ne prescrit pas un cadre d'interface utilisateur que MT4J et JavaFX semblent faire. De plus, MT4J semble être abandonné.

Cela ressemble à une solution prometteuse au moins pour Windows, mais je ne suis pas sûr si elle est effectivement encore sorti: http://wiki.gestureworks.com/index.php/GestureWorksCore:Gestureworks_Core_Tutorials

Ceci est spécifiquement pour le traitement, multi-plateforme, open-source et active: https://github.com/vialab/SMT

0

MT4J ne fonctionne pas avec Windows 8.

Si le applicatin est seulement pour un utilisateur, vous pouvez utiliser JavaFX. Il y a différents écouteurs pour les événements tactiles. Mais il n'est pas possible de traiter deux gestes en même temps, car tous les points de contact fusionneront en un seul geste. Pour les grands écrans multi-touch, c'est un inconvénient. Pour les écrans normaux, où un seul utilisateur est ok. Il existe également GestureWorks . Là, vous pouvez définir un nouveau geste ou utiliser le geste prédéfini. Les gestes sont définis dans un fichier XML (appelé GML). Tout objet peut gérer ses propres gestes. Mais vous devez implémenter le hitTest et l'affectation des points manuellement. Mais il y a un greate tutorial. Une autre bibliothèque, que je n'ai pas testée, est la Multi Touch SDK by PQ Lab.

Questions connexes