Javagirl91
Messages postés6Date d'inscriptionjeudi 2 novembre 2006StatutMembreDernière intervention14 décembre 2007
-
15 nov. 2006 à 11:35
afoufa.afef
Messages postés2Date d'inscriptionjeudi 5 mars 2015StatutMembreDerniè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..
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...
Javagirl91
Messages postés6Date d'inscriptionjeudi 2 novembre 2006StatutMembreDernière intervention14 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..
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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 ..."
Javagirl91
Messages postés6Date d'inscriptionjeudi 2 novembre 2006StatutMembreDernière intervention14 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.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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 ..."