Clavier virtuel [Résolu]

Javagirl91 6 Messages postés jeudi 2 novembre 2006Date d'inscription 14 décembre 2007 Dernière intervention - 15 nov. 2006 à 11:35 - Dernière réponse : afoufa.afef 2 Messages postés jeudi 5 mars 2015Date d'inscription 6 mars 2015 Dernière intervention
- 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...
Afficher la suite 

6 réponses

Répondre au sujet
Javagirl91 6 Messages postés jeudi 2 novembre 2006Date d'inscription 14 décembre 2007 Dernière intervention - 15 nov. 2006 à 14:10
+3
Utile
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..
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Javagirl91
Twinuts 5261 Messages postés dimanche 4 mai 2003Date d'inscription 20 avril 2018 Dernière intervention - 15 nov. 2006 à 14:30
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Twinuts
Javagirl91 6 Messages postés jeudi 2 novembre 2006Date d'inscription 14 décembre 2007 Dernière intervention - 15 nov. 2006 à 15:12
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Javagirl91
Twinuts 5261 Messages postés dimanche 4 mai 2003Date d'inscription 20 avril 2018 Dernière intervention - 15 nov. 2006 à 15:47
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Twinuts
afoufa.afef 2 Messages postés jeudi 5 mars 2015Date d'inscription 6 mars 2015 Dernière intervention - 6 mars 2015 à 16:17
0
Utile
moi aussi je créer d'un interface graphie d'un clavier virtuel
Commenter la réponse de afoufa.afef
Twinuts 5261 Messages postés dimanche 4 mai 2003Date d'inscription 20 avril 2018 Dernière intervention - 15 nov. 2006 à 12:57
-2
Utile
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
Commenter la réponse de Twinuts

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.