Tirage au sort

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

mikekine

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


mikekine

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à !

nicky78

et avec keyReleased à la place de KeyPressed ?

mikekine

C'est ok !  :wink:

mikekine

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é).