Auteur Sujet: Tirage au sort  (Lu 2991 fois)

Hors ligne mikekine

  • Accroc
  • ***
  • Messages: 2052
    • Voir le profil
Tirage au sort
« le: 22 juin 2007 à 23:25:59 »
Voilà le code correspondant au JTextField.


public class Form2 extends JFrame {

private JTextField jTextField1 = null;
private StringBuffer jtf=null;
private int posjtf=0;

.....

   private JTextField getJTextField1() {
jtf=new StringBuffer(50);
if (jTextField1 == null) {
jTextField1 = new JTextField();
jTextField1.setBounds(new Rectangle(15, 65, 175, 20));
jTextField1.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode ();
if (code== KeyEvent.VK_BACK_SPACE){
if (posjtf>0) {
jtf.deleteCharAt(posjtf-1);
posjtf--;
}
jTextField1.setText(jtf.toString().trim());
jTextField1.setCaretPosition(posjtf);
// System.out.println(jtf.toString()+" "+jtf.length()+" "+posjtf);
e.consume();
}
else if (code== KeyEvent.VK_DELETE){
if (posjtf<jtf.length()) jtf.deleteCharAt(posjtf);
jTextField1.setText(jtf.toString().trim());
// System.out.println(jtf.toString()+" "+jtf.length()+" "+posjtf);
e.consume();
}
else if (code== KeyEvent.VK_LEFT || code== KeyEvent.VK_KP_LEFT){
if (posjtf>0) posjtf--;
jTextField1.setCaretPosition(posjtf);
e.consume();
}
else if (code== KeyEvent.VK_RIGHT || code== KeyEvent.VK_KP_RIGHT){
if (posjtf<jtf.length())posjtf++;
jTextField1.setCaretPosition(posjtf);
e.consume();
}
else if (e.getKeyChar() != KeyEvent.CHAR_UNDEFINED && code != KeyEvent.VK_ENTER){
jtf.insert(posjtf, e.getKeyChar());
e.consume();
posjtf=jtf.length();
// System.out.println(jtf.toString()+" "+jtf.length()+" "+posjtf);
jTextField1.setText(jtf.toString());
jTextField1.setCaretPosition(posjtf);
int i=jList1.getNextMatch(jtf.toString().trim(), 0, Position.Bias.Forward);
if (i!=-1) {
jList1.setSelectedIndex(i);
jList1.ensureIndexIsVisible(i);
}
else {
jList1.setSelectedIndex(-1);
}
}
}
});
}
return jTextField1;
}
}


Hormis un autre bug (mais sans rapport), tout fonctionne correctement si ce n'est que à la saisie d'un caractère dans le JTextField, ce dernier apparaît en double (alors que la varaible jtf [StringBuffer qui est la réplique exacte du contenu du JTextField] est correcte, elle).

Profil Supprimé 1

  • Invité
Tirage au sort
« Réponse #1 le: 22 juin 2007 à 23:38:24 »

Hors ligne mikekine

  • Accroc
  • ***
  • Messages: 2052
    • Voir le profil
Tirage au sort
« Réponse #2 le: 22 juin 2007 à 23:44:00 »
Citation de: "Profil supprimé 1"
j'ai pas le doublon en virant la ligne
jTextField1.setText(jtf.toString());


Ca je le sais bien, j'ai déjà testé...

Mais ce n'est pas normal. Cette instruction doit être là !

Hors ligne nicky78

  • Administrateur
  • Habitué
  • *****
  • Messages: 649
    • Voir le profil
Tirage au sort
« Réponse #3 le: 22 juin 2007 à 23:59:25 »
et avec keyReleased à la place de KeyPressed ?

Hors ligne mikekine

  • Accroc
  • ***
  • Messages: 2052
    • Voir le profil
Tirage au sort
« Réponse #4 le: 23 juin 2007 à 00:23:48 »
C'est ok !  :wink:

Hors ligne mikekine

  • Accroc
  • ***
  • Messages: 2052
    • Voir le profil
Tirage au sort
« Réponse #5 le: 23 juin 2007 à 02:23:47 »
Bon, ça tourne bien sauf quand je fais des frappes répétées... là, y'a des bugs qui surgissent aléatoirement.

Je pense que je vais repartir vers le KeyTyped; mais il va falloir que je trouve les codes unicodes de certains caractères spéciaux (et c'est pas gagné).