5 questions sur swing et java.

cs_Tresor Messages postés 38 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 1 mai 2006 - 31 janv. 2006 à 21:23
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 2 févr. 2006 à 20:46
Salut tout le monde !





Je suis un peu coincé. Au fait, je migre de VB6 à java. J’essaie de ‘fabriquer’ mes premières classes, mais là il me faut quelques méthodes et astuces …


1°) Comment faire une zone de saisie de mot de passe (avec les caractères ‘*’ pour masquer le password) avec un JTextField ?


2°) Soit le code suivant :


class ZoneText {


private int nbreClick = 0 ;


JButton b ;


ZoneText(){


b = new JButton() ;


b.addActionListener(new ActionListener() {


public void actionPerformed(ActionEvent e) {


// Comment faire pour accéder à nbreClick de la classe
//ZoneTexte ici ?


// Il est impossible de faire :


// nbreClick ++ ;


}


}) ;


}


Rendre l’attribut nbreClick static ne m’intéresse pas, car chaque objet doit avoir son propre nombre de click.


3°) Comment détruit-t-on explicitement un objet ?


Au fait, je veux savoir comment implémenter le « unload me » de VB6, qui permet de fermer (détruire) une fenêtre et tous les objets qu’elle contient.


En java, si j’ai une classe qui étend JFrame, avec plein de contrôles que j’ai ajouté avec .getContentPane().add( ), comment implémenter un bouton « quitter », qui a pour effet de fermer la fenêtre en cours ?


4°) Dans quel package pourrai-je trouver des méthodes qui permettent de reconnaître la nature d’une chaîne String ?


Des méthodes du genre :


boolean isNumeric(String s) ; // Pour savoir si la chaîne s est numérique


boolean isInteger(String s) ; // Pour les entiers


boolean isFloat(String s) ; // Pour les décimaux


etc …


5°) J’ai besoin qu’un code s’exécute chaque fois que le contenu d’un JTextField est modifié.


Pour y arriver, j’utilise le code suivant : (mais malheureusement, rien ne se produit lorsque je saisie sur la zonede texte)


// Dans une méthode quelconque :


JTextField text = new JTextField(« essaie ») ;


text.addInputMethodListener(new InputMethodListener(){


public void inputMethodTextChanged(InputMethodEvent e){


System.out.println("Youppi !");


}


public void caretPositionChanged(InputMethodEvent e){


System.out.println("Youppi a !");


}


}


) ;


Je ne reçois aucun message d’erreur, seulement je n’ai pas de Youppi dans ma console lorsque le texte de JTextField change.


Mais avec le code ‘similaire’ suivant, tout se passe bien :


// Dans une méthode quelconque :


JTextField text = new JTextField(« essaie ») ;


text.addFocusListener(new FocusAdapter(){


public void focusGained(FocusEvent e){


System.out.println(« Bingo ! ») ;


}


}


);


Tout ceci me laisse perplexe.


Voilà tout (pour le moment),


Merci d’avance pour les réponses, bonne année !

7 réponses

scaryman Messages postés 492 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 16 mai 2007 12
31 janv. 2006 à 21:56
Salut
1) il existe la classe JPasswordField

2) c'est normal tu ne peux pas accéder d'une classe intérieure à un attribut d'une classe
tu pourrais implémenter la classe ActionListener et là je crois que ca marcherait

3) il existe la méthode dispose()

4) genre pour le isInt il y a la méthode parseInt de la classe Integer qui te renvoit une erreur si ce n'est pas un int
même manière pour le float
pour le isNumeric je connais pas

5) il y a addActionListener ou addKeyListener qui devrait produire qqch

Voila
A++
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
1 févr. 2006 à 00:06
Salut,



pour completer le post de scaryman



2,3,5) tu peux tester le code suivant



import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;



import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JTextField;

import javax.swing.text.AttributeSet;

import javax.swing.text.BadLocationException;

import javax.swing.text.PlainDocument;



public class ZoneText extends JFrame{

private int nbreClick1 = 0;

private int nbreClick2 = 0;

JButton b;

JTextField t;

public ZoneText() {



b = new JButton("Compte click");

b.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

nbreClick1++;

ZoneText.this.nbreClick2++;

System.out.println("nbreClick1=" + nbreClick1);


System.out.println("ZoneText.this.nbreClick2=" +
ZoneText.this.nbreClick2);

}



});

//pour les actions sur la croix de fermeture

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

//setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

//setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);



t = new JTextField();

t.setDocument(new PlainDocument(){

public final
void insertString(int offs, String str, AttributeSet a)throws
BadLocationException {


System.out.println("Une action s'est produite dans
le champ text");

for (char c : str.toCharArray()){


if (Character.isDigit(c))//test
un digit



System.out.println("digit=" + c);


if (Character.isLetter(c))//test
un lettre



System.out.println("letter=" + c);

}

super.insertString(offs, str, a);

}

});



add(b, BorderLayout.NORTH);

add(t, BorderLayout.CENTER);

pack();//dimensionne automatiquement la fenetre

setLocationRelativeTo(null);//centre la fenetre

setVisible(true);//affiche la fenetre

}



public static void main(String args[]){

new ZoneText();

}

}










WORA
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
1 févr. 2006 à 00:07
juste pour info je tourne avec le jdk 1.5 donc pas la peine de tester le code sous le 1.4 (surtout à cause du for)

WORA
0
GillesWebmaster Messages postés 496 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 29 juillet 2009 1
1 févr. 2006 à 12:37
Bonjour ,
d'ailleurs pour le JPasswordField tu va avoir des problèmes pour récuperer les valeurs entrées; je te proposes le code suivant:
char[] mdpass=mdpasse.getPassword();

String pass = new String("");
for (int j = 0; j < mdpass.length; j++) {
pass = pass + mdpass[j];
}

Voila
Bonne journée
GillesWebmaster


<HR SIZE=2>

Si ma réponse te plaît merci de l'accepter
0

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

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
1 févr. 2006 à 13:46
Salut,



tu peux faire plus simple



JPasswordField password = new JPasswordField();

String str = new String(password.getPassword());

WORA
0
GillesWebmaster Messages postés 496 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 29 juillet 2009 1
2 févr. 2006 à 20:00
Bonjour ,
en faite non car la méthode getPassword() te renvoye en tableau de char donc il faut convertir...
Bonne Soirée
GillesWebmaster


<HR SIZE=2>

Si ma réponse te plaît merci de l'accepter
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
2 févr. 2006 à 20:46
Salut,



replonge toi java doc et rvois les constructeurs de la classe String.......

WORA
0
Rejoignez-nous