Clavier Virtuel

cs_Yro Messages postés 4 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 8 décembre 2005 - 7 juin 2005 à 11:07
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 - 7 juin 2005 à 12:49
Bonjour à tous.



Je désire faire un clavier virtuel pour mon application qui tournera sur un écran tactile.

Ma première idée à été de redessiner un clavier sur un panel et lorsque
je clique sur une touche, celle-ci va s'inscrire dans le textfield.

Malheureusement, j'aimerai que ce clavier virtuel puisse être utilisé à
différent endroit dans le programme donc il doit être capable d'écrire
dans n'importe quel textfield de n'importe quel fenetre. je vois pas
trop comment faire ça.

De plus, je vois pas très bien comment gérer les tabulation puisque
quand je cliquerai sur la tabulation du clavier , il va en réalité
exécuter un "tab" sur le clavier virtuel et non sur la fenetre
d'encodage. vous voyez?



un autre désidérata aurait été de pouvoir configurer le clavier en querty be, fr, ... azerty....

mais là ce sera pour la suite ;)



J'ai cherché des api toute faites mais nada. qui peut m'aider ou me mettre sur la voie?

Merci


---==Yro==---

1 réponse

bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
7 juin 2005 à 12:49
tu peux essayer de faire un systeme de listener :

Etape 1 : tu crée une interface qui linkera ton clavier au composant qui veut l'utiliser :

interface ClavierListener {

public void toucheAppuyee(String touche) ;

}



Etape 2 :

Tu crée ton panel virtuel, par exemple dans un JPanel prenant en parametre une instance de l'interface que tu as crée :

class PanelClavier extends JPanel implements ActionListener{

ClavierListener cl ;

public PanelClavier(ClavierListener cl) {

this.cl = cl ;

this.setLayout(new BorderLayout());

Box boite = Box.createHorizontalBox();

boite.add( getBouton("a" , "a") );

boite.add( getBouton("z" , "z") );

boite.add( getBouton("e" , "e") );

boite.add( getBouton("r" , "r") );

boite.add( getBouton("t" , "t") );

boite.add( getBouton("y" , "y") );

//a completer

this.add(boite , BorderLayout.CENTER);

}

public JButton getBouton(String nom , String action){

JButton res = new JButton(nom);

res.setActionCommand(action);

res.addActionListener(this);

return res ;

}

public void actionPerformed(ActionEvent e){

cl.toucheAppuyee( e.getActionCommand() );

}

}



Etape 3 :

A l'endroit de ton application où tu veux t'en servir, tu ajoute un
PanelClavier la ou tu le souhaite en passant une instance de
l'interface pour pouvoir récupérer les touches appuyées (une classe de
test) :



public class APIClavier extends JFrame implements ClavierListener{



public static void main(String[] args){

APIClavier pouet = new APIClavier() ;

}



JTextField champ = new JTextField() ;



public APIClavier() {

this.setSize(300 , 200);

this.getContentPane().setLayout(new BorderLayout());

this.getContentPane().add(new PanelClavier(this) , BorderLayout.NORTH);

this.getContentPane().add(champ , BorderLayout.SOUTH);

this.setVisible(true);

}



public void toucheAppuyee(String c) {

champ.setText( champ.getText()+c );

}

}

C'est juste une proposition, il doit y avoir
d'autres solutions...mais cette maniere de faire te simplifiera la
gestion des langues, par exemple en plus de l'instance de
ClavierListener, tu passera en parametre le type de clavier que tu
veux... et la réception de touche restera la meme.. enfin apres c'est a
toi d'élargir la chose...
0
Rejoignez-nous