nonoz
Messages postés57Date d'inscriptionmercredi 29 janvier 2003StatutMembreDernière intervention23 juin 2004
-
21 juin 2004 à 12:20
nonoz
Messages postés57Date d'inscriptionmercredi 29 janvier 2003StatutMembreDernière intervention23 juin 2004
-
23 juin 2004 à 11:51
Bonjour,
j'ai un certain nombre de boutons dans mon application. Je souhaiterais mettre des raccourcit clavier dessus. Pour cela j'ai utilise le code suivant:
requestFocus();
public void keyPressed(KeyEvent evt){ System.out.println("nom");}
public void keyReleased(KeyEvent evt){}
public void keyTyped(KeyEvent evt)
{
String nom = ((JButton)evt.getSource()).getText();
System.out.println("nom" + nom);
}
jButton1.setMnemonic('C');
jButton1.setMnemonic('c');
jButton9.setMnemonic(KeyEvent.VK_R);
Mais ca marche pas, si quelqu'un avait une idee du pourquoi?
Petite description de mon prog.
C'est une calculatrice.
Elle est constitue de 3 classes:
- la principale qui gere le calcul
- la econde qui me sert de memoire
- la troisieme qui affiche les boutons.
Si vous voulez jeter un coup d'oeil dessus
// je recuepere tous les import dont j'ai besoin
import java.awt.* ;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
public class boutons extends JPanel implements ActionListener{
// création des éléments et du layout
GridBagLayout gridBagLayout1 = new GridBagLayout();
JButton jButton1 = new JButton("1");
JButton jButton2 = new JButton("2");
JButton jButton3 = new JButton("3");
//(etc...)
//je declare une variable dans lequel je vais mettre mon applet.
private Applet1 c;
//erreur ici
//
public boutons (Applet1 c) {
this.c=c;
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
//creation des ecouteurs
jButton1.addActionListener(this);
jButton2.addActionListener(this);
jButton3.addActionListener(this);
//(etc...)
//je mets tout l'affichage en place.
this.setLayout(gridBagLayout1);
// positionnement des éléments dans le GridbagLayout
jButtonp.setPreferredSize(new Dimension(49, 25));
jButtonp.setBackground(Color.green);
jButtonp.setMaximumSize(new Dimension(41, 25));
jButtonp.setMinimumSize(new Dimension(49, 25));
//(etc...)
this.add(jButton1, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
this.add(jButton2, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
//(etc...)
}
/** gestion des événements */
public void actionPerformed(ActionEvent e) {
//je recupere le nom du bouton puis le premier char de ce nom
String nom = ((JButton)e.getSource()).getText();
char nompremiercar = nom.charAt(0);
//j'appelle resultat qui se trouve dans l'applet
c.calcul(nompremiercar);
}
}
//-----------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
public class Applet1 extends Applet{
boolean isStandalone = false;
JPanel fondcalc = new JPanel();
GridBagLayout gridBagLayout1 = new GridBagLayout();
JLabel jLabel1 = new JLabel("Bonjour !");
static String chiffre = "0";
boolean bool = false;
// private double result = 0;//contient la valeur du calcul en cours
char operateur = '+';//contient la valeur de l'operateur
/**Obtenir une valeur de paramètre*/
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
/**Construire l'applet*/
public Applet1() {
}
/**Initialiser l'applet*/
public void init() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Initialiser le composant*/
private void jbInit() throws Exception {
fondcalc.setLayout(gridBagLayout1);
boutons mazoneboutons=new boutons(this);
jLabel1.setBackground(Color.white);
jLabel1.setOpaque(true);
jLabel1.setPreferredSize(new Dimension(72, 15));
jLabel1.setVerifyInputWhenFocusTarget(true);
jLabel1.setHorizontalAlignment(SwingConstants.RIGHT);
jLabel1.setHorizontalTextPosition(SwingConstants.RIGHT);
jLabel1.setVerticalTextPosition(SwingConstants.CENTER);
fondcalc.setBackground(SystemColor.control);
fondcalc.setMinimumSize(new Dimension(200, 200));
fondcalc.setPreferredSize(new Dimension(400, 300));
fondcalc.add(jLabel1, new GridBagConstraints(0, 0, 3, 1, 0.0, 0.0
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 0, 5, 0), 192, 0));
fondcalc.add(mazoneboutons, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
this.add(fondcalc, null);
}
/**Obtenir les informations d'applet*/
public String getAppletInfo() {
return "Information applet";
}
/**Obtenir les informations de paramètre*/
public String[][] getParameterInfo() {
return null;
}
/** pour reinitialise ma varible chiffre... */
void initia(){
chiffre = "0";
}
/** pour reinitialise tout... */
void initiatout(){
memoirecalc = new MemoireCalc();
operateur = '+';
chiffre = "0";
estegale = 0.0;
resulta =0.0;
bool = false;
jLabel1.setText("Remise à "+estegale);
}
boolean boolcalc = false;//pour savoir si on doit faire le calcul
/** Fait le calcul */
static double resulta =0.0;
static double resultb =10.0;
static double estegale = 0.0;
static char tempoperateur ='+';
static double tmp;
double test;
private void faitlecalcul(){
resulta = Double.parseDouble(chiffre);
System.out.println("ici" + operateur + "temp" +tempoperateur+"res"+resulta);
switch (operateur) {
//(etc...)
case '+':
System.out.println("memoirea" + memoirecalc.resultinter());
test = memoirecalc.resultinter();
System.out.println("test" + test);
test = test + resulta;
memoirecalc = new MemoireCalc(test);
System.out.println("memoireb" + memoirecalc.resultinter());
jLabel1.setText("" + memoirecalc.resultinter());
operateur = tempoperateur;
break;
default:
jLabel1.setText("defaut +"+estegale+operateur+resulta+"temp"+tempoperateur);
break;
}
initia();
bool = false;
}
/** en fonction du bouton appuye on fait differentes choses */
void calcul(char val){
switch (val) {
case 'O':
initiatout();
break;
case '+':
tempoperateur = '+';
faitlecalcul();
break;
//(etc...)
default:
System.out.println("defaut" + operateur + "temp" +tempoperateur+"res"+resulta);
if(tempoperateur=='='){
initiatout();
}
if(bool == true){
chiffre =chiffre+val;
}else{
chiffre = ""+val;
bool = true;
}
jLabel1.setText(""+chiffre);
break;
}
}
//je construit ma classe memoire
MemoireCalc memoirecalc = new MemoireCalc();
//
}
//----------------------------------------------------------------------------------------
/** conserve en memoire le resultat de mon calcul */
class MemoireCalc{
double resultinter;//contient le resultat intermediaire
double M1;//bouton memoire 1
double M2;//bouton memoire 2
MemoireCalc() {//pour surcharger ma classe
resultinter = 0;
M1 = 0;
M2 = 0;
}
MemoireCalc(double resultinter) {//methode qui enregistre nouvelle valeur intermediaire
this.resultinter = resultinter;
}
double resultinter() {//methode renvoyant la valeur du resultat intermediare
return resultinter;
}
}
cid019
Messages postés237Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention11 juillet 2006 22 juin 2004 à 07:57
voici un exemple que j'avais fait pour un projet de pacman :
// Fenetre de lancement du programme
class FenetrePal extends Frame implements ActionListener, KeyListener
public void keyReleased(KeyEvent e) { /* RIEN A FAIRE */ }
public void keyTyped(KeyEvent e) { /* RIEN A FAIRE */ }
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_P)
Jeu.getInstance().setPause(!Jeu.getInstance().getPause());
else if (e.getKeyCode() == KeyEvent.VK_Q)
{
new VerifQuit().show();
}
}
pour l'histoire de la classe abstraite je sais pas trop, peut etre as-tu oublié de déclarer une des fonctions gérant les evenements? Ou peut-etre ca vient du fait que ta classe soit 'public' mais j'y crois pas trop.
Envoie l'erreur renvoyé, ca peut toujours eclaircir la chose
nonoz
Messages postés57Date d'inscriptionmercredi 29 janvier 2003StatutMembreDernière intervention23 juin 2004 22 juin 2004 à 09:44
cid019 -> tu me disais d'utiliser setKeyListener(this) mais dans ton exemple tu ne l'utilises pas???
VK_P ca designe bien la touche P (majuscule)?
et a quel endroit et comment dois je utiliser le setKeyListener(this)? Le prog considere ca comme une methode mais je ne l'ai pas cette methode. Et si je ne le mets pas mon prog compile mais ne capte absolument pas que je tappe sur les touches.
sinon c'est bizarre j'ai pas l'impression d'avoir change quelque chose mais le prog ne me demande plus de mettre ma classe en abstract???
cid019
Messages postés237Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention11 juillet 2006 22 juin 2004 à 10:25
voila le programme que je suis en trai de faire :
class FenetrePal extends JFrame implements ActionListener, KeyListener
{
.....
addKeyListener(this);
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_Q)
{
System.exit(0);
MenuPal.bdd.Deconnecte();
}
}
public void actionPerformed (ActionEvent e)
{
if (e.getSource() == mnuAjout)
{
menu = 0;
new Choix(this).show();
}
else if (e.getSource() == mnuModif)
{
menu = 1;
new Choix(this).show();
}
else if (e.getSource() == mnuSuppr)
{
menu = 2;
new Choix(this).show();
}
}
}
nonoz
Messages postés57Date d'inscriptionmercredi 29 janvier 2003StatutMembreDernière intervention23 juin 2004 22 juin 2004 à 10:42
Un Grand Merci !!! :)
QUestion subsidiaire:
Que dois je mettre a la place de VK pour pouvoir utiliser les touches du pave numerique?
et sinon quand je suis dans mon navigateur il faut que je clique sur l'appli pour que ca fonctionne. Est il possible de mettre directement le focus sur l'appli?
cid019
Messages postés237Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention11 juillet 2006 22 juin 2004 à 10:52
pour le focus utilise la methode setFocusalbe(true ou false) sur le composant souhaité.
Normalement ca marche. J'ai le meme probleme mais je l'ai pas resolu. J'ai du mettre l'instruction au mauvais endroit