Controlar caracteres en un TextField

Luis_Paig
15 de Marzo del 2004
Bien mi proposito es controlar que un usuario solo meta números en un TextField y no letras. ¿Cual sería la manera de hacerlo?.

Me acuerdo que en visual Basic se podía hacer viendo que código ascii introducía pero aquí no lo sé. Por favor ayudarme. El control lo quiero hacer cuando el usuario pulsa el boton no con el TextListener.

Gracias y Saludos.

Ana
15 de Marzo del 2004
Hola! No hace mucho q tuve un problema parecido,por no decir igual, hay t mando mi código,espero q t sirva.

private void botRangoActionPerformed(java.awt.event.ActionEvent evt){

int ran;
boolean salir=false;
String anterior=String.valueOf(rango);

String rtdo = (String)JOptionPane.showInputDialog(this,"Eliga el rango=", "Rango",
JOptionPane.PLAIN_MESSAGE, null,null,anterior);
if ( rtdo != null){
try{
rango=Integer.parseInt(rtdo);
ran=(int)rango;

if ( ran <0 || ran >99)
{JOptionPane.showMessageDialog(this,"Le recuerdo que el rango ha de ser positivo e inferior a 100","Error de rango",
JOptionPane.PLAIN_MESSAGE);
rango=Integer.parseInt(anterior);}

}
catch (NumberFormatException e){
JOptionPane.showMessageDialog(this,"¡Valor erroneo!","Error de rango",
JOptionPane.PLAIN_MESSAGE);}

}
}


PD: Por favor una España sin violencia, de ningun tipo

franmoreno
15 de Marzo del 2004
te mando este ejemplo que controla la longitud de entrada en un JTexfield, facilmente puedes modificarlo para controlar tambien qué se teclea dentro de el:


// PlainDocExample.java
//
import javax.swing.text.*;

public class PlainDocExample {
public static void main(String[] args) {
try {

// Dump an empty document
PlainDocument doc = new PlainDocument();
doc.dump(System.out);
System.out.println("==========");

// Add 3 lines of text, dump again
doc.insertString(0, "Line Onen", null);
doc.insertString(doc.getLength(), "Line Twon", null);
doc.insertString(doc.getLength(), "Line Three", null);
doc.dump(System.out);
System.out.println("==========");

// Remove "One/Line Two/Line ", dump again
doc.remove(5, 18);
doc.dump(System.out);
} catch (BadLocationException ex) {}
}
}

**************************

// FixedLengthTextField.java
//
import javax.swing.*;

// A fixed-length JTextField
public class FixedLengthTextField extends JTextField {

public FixedLengthTextField(int length) {
this(null, length);
}

public FixedLengthTextField(String text, int length) {
super(new FixedLengthPlainDocument(length), text, length);
}
}

**************************

// FixedLengthPlainDocument.java
//
import java.awt.Toolkit;
import javax.swing.*;
import javax.swing.text.*;

// An extension of PlainDocument that restricts the length of the content it
// contains.
public class FixedLengthPlainDocument extends PlainDocument {

// Create a new document with the given max length
public FixedLengthPlainDocument(int maxLength) {
this.maxLength = maxLength;
}

// If this insertion would exceed the maximum document length, we "beep" and do
// nothing else. Otherwise, super.insertString() is called.
public void insertString(int offset, String str, AttributeSet a)
throws BadLocationException {
if (getLength() + str.length() > maxLength) {
Toolkit.getDefaultToolkit().beep();
}
else {
super.insertString(offset, str, a);
}
}

private int maxLength;
}

Alf
15 de Marzo del 2004
Ahí va una forma muy sencilla de hacerlo con un listener.

// Listeners para controlar que el texto sea numérico
JText.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!((Character.isDigit(c) ||
(c == KeyEvent.VK_BACK_SPACE) ||
(c == KeyEvent.VK_DELETE)))) {
getToolkit().beep();
e.consume();
}
}
});