Tirage au sort

Démarré par mikekine, 22 Juin 2007 à 23:25:59

mikekine

***
Accroc
Messages: 2057
Emplacement: Brabant wallon
IP archivée
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é
IP archivée

mikekine

***
Accroc
Messages: 2057
Emplacement: Brabant wallon
IP archivée
Citation de: Profil supprimé 1j'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à !

nicky78

Administrateur
*****
Habitué
Messages: 649
Emplacement: Le Chesnay
IP archivée
et avec keyReleased à la place de KeyPressed ?

mikekine

***
Accroc
Messages: 2057
Emplacement: Brabant wallon
IP archivée
C'est ok !  :wink:

mikekine

***
Accroc
Messages: 2057
Emplacement: Brabant wallon
IP archivée
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é).