benou | j'ai pas retrouvé le topic.
voilà un truc que j'avais fait pour un textfield pour float. Faut simplifier le code pour gérer que les entiers :
Code :
- package convertisseur;
- import javax.swing.*;
- import javax.swing.text.*;
- import java.awt.Toolkit;
- import java.text.ParsePosition;
- import java.text.NumberFormat;
- import java.text.DecimalFormat;
- import java.text.ParseException;
- import java.util.Locale;
- /**
- Attention : cette fonction n'accepte la saisie que de chiffres et du séparateur de
- décimal. Pour faire ca bien, il faudrait aussi accepter les autres caractères qui peuvent
- composer un float : le signe negatif, le séparateur de groupe, l'expossant, etc ...
- Mais il ne faut accepter la saisie de ces caractères que si leur emplacement est correct, ce qui rend
- le travail un peu plus difficile. Si quelqu'un a le courage de faire ca, merci de me l'envoyer
- */
- public class JFloatField extends JTextField {
- private Toolkit toolkit;
- private DecimalFormat decimalFormatter;
- private char decimalSeparator;
- private void init() {
- toolkit = Toolkit.getDefaultToolkit();
- setDecimalFormat( new DecimalFormat("#0.00" ));
- }
- public JFloatField() {
- super();
- init();
- }
- public JFloatField(int columns) {
- super(columns);
- init();
- }
- public void setDecimalFormat(DecimalFormat formatter) {
- decimalFormatter = formatter;
- decimalSeparator = decimalFormatter.getDecimalFormatSymbols().getDecimalSeparator();
- }
- public float getValue() {
- if (getText().equals("" )) {
- return 0;
- }
- try {
- return decimalFormatter.parse(getText()).floatValue();
- } catch (ParseException e) {
- // ne devrait jamais arriver
- toolkit.beep();
- return 0;
- }
- }
- public void setValue(float value) {
- setText(decimalFormatter.format(value));
- }
- public void format() {
- setValue(getValue());
- }
- protected Document createDefaultModel() {
- return new JFloatFieldDocument();
- }
- protected class JFloatFieldDocument extends PlainDocument {
- protected boolean comma=false;
- public void insertString(int offs, String str, AttributeSet a)
- throws BadLocationException {
- char[] source = str.toCharArray();
- char[] result = new char[source.length];
- int j = 0;
- char c;
- for (int i = 0; i < result.length; i++) {
- c = source[i];
- if (c == '.') {
- c = decimalSeparator;
- }
- if (Character.isDigit(c))
- result[j++] = c;
- else if (c == decimalSeparator) {
- if (! comma) {
- comma = true;
- result[j++] = c;
- } else {
- toolkit.beep();
- }
- } else {
- toolkit.beep();
- }
- }
- super.insertString(offs, new String(result, 0, j), a);
- }
- public void remove(int offs, int len) throws BadLocationException {
- String removedText = getText(offs, len);
- if (removedText.indexOf(decimalSeparator) != -1) {
- comma = false;
- }
- super.remove(offs, len);
- }
- }
- }
|
mais visiblement en jdk1.4 ca a bcp changé : y a moyen de faire bcp plus simple Message édité par benou le 10-03-2004 à 19:27:47 ---------------
ma vie, mon oeuvre - HomePlayer
|