1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
package actes.sepultures;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
public class TextFieldAge extends JTextField
{
/**
* L'âge est données sous la forme AaMmSsJj
* @param s l'âge sous forme d'une String
*/
public TextFieldAge(String s)
{
setDocument(new DocumentAge());
setText(s);
}
public static void main(String[] args)
{
JFrame fenetre = new JFrame();
fenetre.setSize(600, 100);
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panneau = new JPanel();
JLabel label = new JLabel("entrer un âge");
TextFieldAge age = new TextFieldAge("70s6m");
age.setColumns(10);
panneau.add(label);
panneau.add(age);
age.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println(age.getText());
}
});
fenetre.getContentPane().add(panneau);
fenetre.setVisible(true);
}
class DocumentAge extends PlainDocument
{
@Override
public void insertString(int offset, String str, AttributeSet a) throws BadLocationException
{
super.insertString(offset, age(str), a);
}
//une procédure pour vérifier ce qui est entré
private String age(String str)
{
//chaîne vide : rien à traiter
if (str.isEmpty()) return str;
//sinon on transforme en minuscule
str = str.toLowerCase();
//les caractères
char[] caracteres = str.toCharArray();
String s = "", v = "";
try
{
v = this.getText(0, this.getLength());
} catch (BadLocationException e)
{
e.printStackTrace();
}
char caracterePrecedent = (v.isEmpty() ? 0 : v.toCharArray()[v.length() - 1]);
for(int i = 0; i < caracteres.length; i++)
{
char c = caracteres[i];
//c'est un chiffre
if (Character.isDigit(c))
{
s += c;
v += c;
caracterePrecedent = c;
continue;
}
//ce n'est pas un chiffre, ni 'a', 'm', 's', 'j', on arrête tout
if (!"amsj".contains("" + c)) break;
//c'est 'a', 'm', 's' ou 'j', il doit être précédé d'un chiffre
if (v.length() == 0) break;
if (!Character.isDigit(caracterePrecedent)) break;
//il ne peut y avoir qu'un seul 'a', 'm', 's', 'j'
if (v.contains("" + c)) break;
//la frappe de 'j' met fin à la frappe
if (c == 'j')
{
s += c;
break;
}
//le nombre de semaines
if (c == 's')
{
s += c;
caracterePrecedent = c;
continue;
}
//le nombre mois, il ne doit pas y avoir eu de s
if (c == 'm')
{
if (!v .contains("s"))
{
s += c;
v += c;
caracterePrecedent = c;
}
continue;
}
//le nombre d'années, il ne doit pas y avoir eu de m ou de s. Pour j c'est inutile car la frappe
//de j met fin à la saisie
if (c == 'a')
{
if (!v.contains("s") && !v.contains("m"))
{
s+= c;
v += c;
caracterePrecedent = c;
}
}
}
return s;
}
}
} |
Partager