Bonjour,
je suis débutant en Java et je voudrais concevoir un clavier visuel. mais je ne sais pas comment faire.
Bonjour,
je suis débutant en Java et je voudrais concevoir un clavier visuel. mais je ne sais pas comment faire.
Salut,
S'il s'agit d'un clavier "visuel", alors il va falloir afficher quelque chose, donc déjà en premier lieu déterminer avec quel type d'API. Pour les applications desktop, le plus commun est Swing, mais JavaFX est une alternative (plus proche des interfaces qu'on peut faire en web). Ensuite, il y a 2 options : utiliser des composants standard (comme JButton en Swing), ou dessiner entièrement un clavier graphiquement (on peut partir d'une image existante (un png par exemple) de clavier). Dans le premier cas, ce sera plus simple de gérer la souris, mais moins joli, et présentera une certaine difficulté d'agencement en cas d'agencement dynamique (voir LayoutManager en Swing).
Pour faire ce type d'interface, il te faut donc apprendre Swing (ou JavaFx) : tu trouveras dans les FAQ et les tutoriels de Developpez.net (liens en haut de cette page) tout ce qu'il faut (guide pour Swing : regarder les JFrame, JPanel et JButton).
Pour pouvoir gérer l'interaction avec le clavier "physique", regarde du côté de la classe KeyEventDispatcher (en Swing toujours)
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Bonjour Joel !
Dans le cas où l'on voudrait créer un clavier à partir d'image existantes ou à partir d'images que l'on dessine nous mêmes :
Pouvons-nous dessiner ou utiliser l'image d'un clavier entier ou doit-on dessiner ou utiliser des images de boutons de clavier et les mettre une par une dans des layout managers ?
Dan le cas où l'on dessine le clavier entier, est-ce possible de déterminer des zones de listeners où l'on pourra cliquer avec la souris ou faire d'autres actions ?
Merci,
OS : LinuxMint 20
Salut,
JavaFX possède déjà un clavier visuel, voir Le clavier virtuel et les contrôles mobiles en JavaFX sur mon ancien blog. Mais il est assez limité (support QWERTY uniquement + qq modes de saisie alternatifs). Il a déjà été suggéré d'utiliser le clavier visuel natif é la place (y a pas de raison d'utiliser un clavier visuel JavaFX quand Windows, par exemple, en fourni déjà un de base), mais je ne sais pas si c'est dans les cartons pour le JDK 9.
Le code source de ce clavier virtuel devrait être accessible dans les sources du repo de l'OpenJFX (chercher VirtualKeyboard et VirtualKeyboardSkin).
Pour créer un clavier a partir de rien, y a plein plein de solutions possible. Le tout c'est de savoir quel environnement graphique tu vises et le degré d'emmm... à programmer ça que tu envisages.
- JavaFX : utiliser des Region ou des Bouton pour les touches et un layout customisé ou un contrôle / FXML customisé (via SceneBuilder) par clavier qu'on veut représenter. On peut skinner via CSS ce qui inclut des images pour le clavier lui-même ou les touches.
- Swing : ça va être un poil plus complexe mais rien n’empêche de créer un layout customisé ou un composant customisé (via les outils d’édition d'UI de NetBeans ou Eclipse) par type de clavier avec des JButton ou des JPanel dedans qui représentent les touches du clavier. Comme toujours skinner le tout avec des images demandera sans doute pas mal de réécriture de painComponent(). Ou alors il faut aller voir du coté de Nimbus et des LnF.
- Pur Java 2D (ou JavaFX Canvas) : il va falloir tout faire a mano. Une grosse redéfinition d'un paintComponent() dans un JPanel (resp dans les contrôles FX appropriés) devrait être suffisant pour dessiner le clavier d'un seul tenant soit via des directives de dessin, soit en prenant une image. Il va falloir se délimiter des zones géométriques qui définiront les touches du clavier et permettront alors de réagir au passage de la souris. Du coup ça va ressembler plus a de la programmation d'un jeu 2D qu'a du montage d'UI.
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Je dirais que ça dépend de ce qu'on veut faire au juste : on peut avoir une image unique et un contrôleur (écouteur de souris) qui connait les zones et sait associer les touches avec ces zones (l'équivalent de img/map html). On peut aussi avoir une image pour chaque touche (ou même une animation pour simuler l'enfoncement de la touche) : on peut faire de l'agencement à la mano (avoir une liste d'objets Touche, qui connaissent leur emplacement et leur zone de réaction), ou implémenter LayoutManager (et/ou LayoutManager2) pourle gérer à la Swing. On peut avoir pleins de petites images et reconstituer une image globale du clavier en mémoire (prendra plus de mémoire, mais sera plus performant à l'affichage).
Bien sûr. Lorsqu'on reçoit un évènement de souris, on a toujours les coordonnées du pointeur, que l'on peut comparer (à des formes par exemple (voir interface java.awt.Shape en AWT/SWING) ou simplement avoir un algorithme de calcul qui déduit de la position de la souris la touche censée être survolée (comme dans l'exemple de code que j'ai donné ici)). Ensuite, on peut implémenter un mécanisme évènementiel qui imite celui des ActionListeners SWING, et qui permet ensuite de plus facilement ajouter des actions aux touches...
La problématique la plus importante est de savoir quel est le but du clavier : à priori, remplacer le clavier physique, donc taper des lettres, du texte... où doit aller ce texte ? Dans un composant Java de l'application (un JTextArea par exemple), ou dans n'importe quelle fenêtre ou champ d'édition de la machine, ce qui est plus complexe en Java.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager