Discussion:
cambiar texto de un JtextField a float
(demasiado antiguo para responder)
Javier Linde
2004-06-03 17:18:56 UTC
Permalink
Estoy realizando un applet y me gustaria que Sólo me dejara introducir
caracteres muméricos y una vez introducidos estos, coger el texto y
utilizarlo como un float, que es realmente lo que necesito. Muxas Gracias
EdUarDo
2004-06-04 07:32:08 UTC
Permalink
Post by Javier Linde
Estoy realizando un applet y me gustaria que Sólo me dejara introducir
caracteres muméricos y una vez introducidos estos, coger el texto y
utilizarlo como un float, que es realmente lo que necesito. Muxas Gracias
He encontrado un código que te puede ser de utilidad. Esto define un text field para enteros,
sólo tienes que modificarlo adecuadamente para que puedas introducir números reales.


import java.awt.event.KeyEvent;
import javax.swing.JTextField;


public class IntegerTextField extends JTextField {

// De aquí sobra el punto
final static String badchars
= "`~!@#$%^&*()_+=\\|\"':;?/>.<, ";

public void processKeyEvent(KeyEvent ev) {

// Y este metodo lo tendrás que modificar si quieres limitar el número de decimales,
// controlar cuando meten un punto, etc..., a tu gusto, vamos
char c = ev.getKeyChar();

if((Character.isLetter(c) && !ev.isAltDown())
|| badchars.indexOf(c) > -1) {
ev.consume();
return;
}
if(c == '-' && getDocument().getLength() > 0)
ev.consume();
else super.processKeyEvent(ev);

}
}
unknown
2004-06-04 22:15:37 UTC
Permalink
Si para ti "123.456" :

- es 123 con 456 => float f = Float.valueOf( "123.456" ).floatValue();

- es 123 mil 456 =>
Number num = java.text.NumberFormat.getInstance().parse("123.456");
float f = num.floatValue();

Salu2.
Contactar: http://www.terra.es/personal/eurojet/formmail.htm
NO SPAM: http://www.myjavaserver.com/servlet/eurojet.shtml
________________________________________________
Post by Javier Linde
Estoy realizando un applet y me gustaria que Sólo me dejara introducir
caracteres muméricos y una vez introducidos estos, coger el texto y
utilizarlo como un float, que es realmente lo que necesito. Muxas Gracias
unknown
2004-06-05 11:30:55 UTC
Permalink
Si aceptas una sugerencia, utiliza JFormattedText:

JFormattedTextField ft = new JFormattedTextField(
java.text.NumberFormat.getInstance() );
ft.setValue(new Float(9123.456F));
Float float = (Float) ft.getValue();
float f = float.floatValue()

Salu2.
Contactar: http://www.terra.es/personal/eurojet/formmail.htm
NO SPAM: http://www.myjavaserver.com/servlet/eurojet.shtml
_______________________________________________
Post by Javier Linde
Estoy realizando un applet y me gustaria que Sólo me dejara introducir
caracteres muméricos y una vez introducidos estos, coger el texto y
utilizarlo como un float, que es realmente lo que necesito. Muxas Gracias
Gonza
2004-06-07 19:34:59 UTC
Permalink
Si quieres que solo te deje escribir caracteres numericos deberias llmar al
evento de validacion de la caja de texto (creo que era 'textValueChanged' de
TextListener), avisandole de que lo que ha introducido no es valido, o el
evento keyTyped de KeyListener, para que cada vez q escriba un caracter
conpruebe si es o no es numerico...
Otra solucion no se me ocurre o no conozco...
Saludos
Post by Javier Linde
Estoy realizando un applet y me gustaria que Sólo me dejara introducir
caracteres muméricos y una vez introducidos estos, coger el texto y
utilizarlo como un float, que es realmente lo que necesito. Muxas Gracias
a***@gon.no
2004-06-11 13:44:32 UTC
Permalink
Tanto poner el punto sobre las ies, que te has colado.
JTextField no acepta TextListener, pues no dispone de un
metodo addTextListener().

Bye, bye.
unknown
2004-06-12 12:05:26 UTC
Permalink
Dada la confusión generada sobre el tema me he entretenido un poco:

/**
* JNumericField.
* JTextField numerico, bajo arquitectura MVC.
*
*/
import java.awt.Toolkit;
import java.text.*;
import javax.swing.text.*;

public class JNumericField extends javax.swing.JTextField {
private NumberFormat nf = NumberFormat.getInstance();

public JNumericField() {
super();
}

public JNumericField(String text) {
super(text);
}

public JNumericField(int columns) {
super(columns);
}

public JNumericField(String text, int columns) {
super(text, columns);
}

protected Document createDefaultModel() {
return new NumericDocument();
}

public double getValue() throws ParseException {
Number num = nf.parse(super.getText());
return num.doubleValue();
}

public void setValue(double d) {
super.setText(nf.format(d));
}

public void setFormat(NumberFormat format) {
nf = format;
}

static class NumericDocument extends PlainDocument {

public void insertString(int offset, String string, AttributeSet
attributes)
throws BadLocationException {

if (string == null) {
return;
} else {
for (int i=0; i<string.length(); i++) {
char c = string.charAt(i);
if ( !(Character.isDigit(c) ||
c==',' || c=='.') ) {
Toolkit.getDefaultToolkit().beep();
return;
}
}
super.insertString(offset, string, attributes);
}
}
}
}
________________________________________________
Salu2.
Contactar: http://www.terra.es/personal/eurojet/formmail.htm
NO SPAM: http://www.myjavaserver.com/servlet/eurojet.shtml
________________________________________________

Loading...