Clavier virtuel

Résolu
Javagirl91 Messages postés 6 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 14 décembre 2007 - 15 nov. 2006 à 11:35
afoufa.afef Messages postés 2 Date d'inscription jeudi 5 mars 2015 Statut Membre Dernière intervention 6 mars 2015 - 6 mars 2015 à 16:17
    Bonjour tout le monde! je suis nouvelle sur le forum..et j'ai une question de la plus haute importance!

Voilà, je me suis lancée dans la réalisation d'un clavier virtuel, et j'ai quelques pb..

tout daboir voici mon source :

package Frame;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Component;

class CalculatricePanel extends JPanel implements ActionListener{

    /* Zone résultat */
    Label resultat = new Label("0");
    //private JTextField resultat;
    private double arg = 0;
    private String op = "=";
    private boolean start = true;
    private boolean error = false;
   
   
    public CalculatricePanel(){
        setLayout(new BorderLayout());
       
        // Zone de Résultat
        resultat.setBackground(Color.black);// Fond Noir
        resultat.setForeground(Color.green);// Chiffres en Vert
        resultat.setAlignment(Label.RIGHT);// à partir de la droite
        resultat.setFont(new Font("Times",Font.BOLD,16));// Police
       
        //Ecoute de la souris
       
        // Ligne Supérieure de Calcul
        add(resultat,BorderLayout.NORTH);
         
        /** Création des Boutons de saisie
         *  "substring(x,y)" ou Sous-Chaînes récupère à partir de x y caractères
         *     Exemple "String salut="Hello";
         *          "String s = salut.substring(0,4)";
         *  Cet exemple crée une chaîne ayant la valeur "Hell"
         * Si i=2 => i+1=3 On récupère avec buttons.substring(i,i+1)
         * à partir de 2 la Chaîne de longueur (i+1)-i soit 3-2=1
         * donc "9" pos.2 Longueur 1 de la chaîne "789/456*123-0.=+"
         */
        /*
        JPanel PFonctions = new JPanel();
        PFonctions.setLayout(new GridLayout(4,3));
        String Fonction1 = "F1F2F3F4F5F6F7F8F9";
        for (int i = 0; i < Fonction1.length(); i++)
            addButton(PFonctions, Fonction1.substring(i, i + 1));
        add(PFonctions,BorderLayout.NORTH);
       
        */
        JPanel p = new JPanel();
        p.setLayout(new GridLayout(4,3));
        String buttons = "789/456*123-0.=+";
        for (int i = 0; i < buttons.length(); i++)
            addButton(p, buttons.substring(i, i + 1));
        add(p,BorderLayout.EAST);
       
        JPanel PLettres = new JPanel();
        PLettres.setLayout(new GridLayout(3,7));
        String Lettres = "AZERTYUIOPQSDFGHJKLMWXCVBN";
        for (int i = 0; i < Lettres.length(); i++)
            addButton(PLettres, Lettres.substring(i, i + 1));
        add(PLettres,BorderLayout.WEST);
        // Bouton Effacement
        p=new JPanel();
        p.setBackground(Color.blue);// Fond en Bleu
        p.setBounds(10,10,700,40);
        addButton(p,"Annulation");
        add(p,BorderLayout.SOUTH);
    }

    private void addButton(Container c, String s){
        JButton b = new JButton(s);
        c.add(b);
        b.addActionListener(this);
    }
  
    public void actionPerformed(ActionEvent e){
        String s = e.getActionCommand();// récupère la string saisie
        if (s.equals("Annulation")){// Remise à Zéro
            arg=0;
            resultat.setText(""+arg);
            double x = Double.parseDouble(resultat.getText());
            start=true;}
        else if ('0' <= s.charAt(0) && s.charAt(0) <= '9' ){// Chiffres compris entre 0 et 9 ou . décimal
                    if (start) resultat.setText(s);// 1ère saisie "start" = vraie       
                    /* sinon on affiche par "resultat.setText"
                     * la saisie précédente "resultat.getText" + la nouvelle "s"
                     */
                    else resultat.setText(resultat.getText() + s);
                    start = false;}// Début de saisie on met start (début) à faux
        // Si les conditions ci-dessus ne sont pas remplies
       
        else if ('A' <= s.charAt(0) && s.charAt(0) <= 'Z'){// Chiffres compris entre 0 et 9 ou . décimal
            if (start) resultat.setText(s);// 1ère saisie "start" = vraie       
            /* sinon on affiche par "resultat.setText"
             * la saisie précédente "resultat.getText" + la nouvelle "s"
             */
            else resultat.setText(resultat.getText() + s);
            start = false;}// Début de saisie on met start (début) à faux
// Si les conditions ci-dessus ne sont pas remplies
        else{
             double x = Double.parseDouble(resultat.getText());
             calcul(x);
             op = s;
             start = true;
            }
        if(error){
            resultat.setText("Error !!!");
            error=false;
        }
    }
   
   
  
    public void calcul(double n){
        if (op.equals("+")) arg += n;
        else if (op.equals("-")) arg -= n;
        else if (op.equals("*")) arg *= n;
        else if (op.equals("/")&&n!=0) arg /= n;
        else if (op.equals("/")&&n==0)error=true;
        else if (op.equals("=")) arg = n;        
        resultat.setText("" + arg);
    }
}

class CalculatriceFrame extends JFrame{
   
    public CalculatriceFrame(){
        setTitle("CLAVIER VIRTUEL");
        setSize(700, 300);
        addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                System.exit(0);
            }
         } );

        Container contentPane = getContentPane();
        contentPane.add(new CalculatricePanel());
    }
}
/*********************************************************
                    Main
*****************************************************************/
public class Calculatrice{
   
    public static void main(String[] args){
       
        JFrame frame = new CalculatriceFrame();
        frame.setAlwaysOnTop(true);
        frame.setVisible(true);
       
    }
}
//*************************************************************************   

voilà bon maintenant voici les explications.. :
JE veux donc réaliser un clavier virtuel et j'ai tellement galéré a pouvoir donner unevaleur aux boutons pour qu'elle puisse s'afficher dans mon JTextField que j'ai fini par (honte à moi!) récupérer une calculatrice et y ai ajouté des lettres..
Donc voilà mon premier pb a été résolu!

Maintenant ke vrai problème est de savoir comment faire pour que ma fenetre de mon clavier ne soit pas toujours active et ke je puisse positionner mon curseur dans une autre application et cliquer sur mes touches pour que les lettres s'affiche dans mon appli..
Comme un vrai clavier virtuel koi!
J'attend vos réposnes avec impatience..
Je suis une jeune débutante en galère..qui a besoin de vos sages conseils en la matière et de votre indulgence..
merci davance...

6 réponses

Javagirl91 Messages postés 6 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 14 décembre 2007
15 nov. 2006 à 14:10
Merci bcp pour tes explications, certaines choses restent encore un peu floues poru moi...mais le handle me di kelke chosE..c'est utilisé pour maintenir une fenetre ou kelke chose du genre...

Je n'ai aps trouvé de clavier java sur le net...
Je vais surfer un peu sur le sujet et je te tiens au corant de mon avancement..
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 nov. 2006 à 14:30
Salut,

le handle (nom le plus utiliser avec windows) ou drawable(plus ou moins kifkif au handle est en quelque l'identifiant unique pour ta fenetre/ou encore pour ton composant.

oriente tes recherches en anglais soit "virtual keyboard" exmple avec google et cette recherche je suis tombé sur xkeyboard (pour windows) sous unix il existe xvkbd

PS:je ne sais pas ce que vaut xkeyboard je n'ai testé que xvkbd pour un projet avec écran tactile


------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
3
Javagirl91 Messages postés 6 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 14 décembre 2007
15 nov. 2006 à 15:12
Justement! tu tape en plein dedans.J'ai repéré ces deux claviers.;mais jai pas eu le temps de les tester..
Je dois développer un clavier pour un système linux (unix) ki adoptera un écran tactile.
La souris étant émulée sur l'écran.
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 nov. 2006 à 15:47
Salut,

son principe est simple tu l'execute, tu clic sur le bouton focus ensuite il procede ainsi :

clic sur une touche lui fait relacher son focus pour le donner à la premiere fenetre active sur le burreau.
ensuite il recup tout ce qu'il faut pour ecrire dedans (display, drawable, etc.., du champ qui a eu le focus).
il reprend le focus et inject le texte dans le champs .

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
afoufa.afef Messages postés 2 Date d'inscription jeudi 5 mars 2015 Statut Membre Dernière intervention 6 mars 2015
6 mars 2015 à 16:17
moi aussi je créer d'un interface graphie d'un clavier virtuel
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 nov. 2006 à 12:57
Salut,

<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" /><title></title><meta name="GENERATOR" content="OpenOffice.org 2.0 (Linux)" /><meta name="AUTHOR" content="bob bob" /><meta name="CREATED" content="20061115;12304100" /><meta name="CHANGED" content="16010101;0" /><style type="text/css"><!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0.21cm }
--></style>en java pure je ne pense pas que ce
soit possible sans refaire la terre entière et même
après je ne suis toujours pas certain que tu puisses arriver à
tes fin.... tu peux toujours essayer de transformer ton application
en service(windows) ou en demon(unix) même la il te faudra une
interaction directe avec le système d'exploitation (l'api à
utiliser :
http://wrapper.tanukisoftware.org/doc/english/introduction.html).

toute fois si le fait de rendre ton
application en service ne suffit pas tu devras rendre non focusable
ta fenêtre pour que tu puisse préserver le focus sur la
bonne fenêtre(ou composant) ou alors, garder les références
de la fenêtre ouverte + les références du
composant sélectionné (exemple pour une fenêtre
contenant plein de champs textes), soit stocker le handle du
composant (windows=HWND, unix=drawable) afin de lui redonner le focus
et pouvoir le modifier (voir même redonner le focus de la
fenêtre avant).

Bref pas simple ce que tu veux faire et
je ne pense pas que malgré le fait que java permet une
souplesse dans la création d'applications il soit super
approprié pour ce genre d'application vu que les ¾ de
l'application risque d'être en code natif...

cela dit si tu en as vraiment besoin tu
peux récupérer des soft qui le font il en existe pas
mal sur le web et certains en java (avec couche JNI).

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
-2
Rejoignez-nous