propiedades fecha ejemplos convertir java swing keyboard double jformattedtextfield

java - fecha - JFormattedTextField for Double todavía toma caracteres



jtextfield java swing (2)

Esta pregunta ya tiene una respuesta aquí:

Tengo un JFormattedTextField donde el usuario ingresará los precios, tengo esto, pero si escribo un caracter, me lo permitirá de todos modos. Necesito este campo de texto para leer solo números o, desde el teclado, e ignorar si es un char. ¿Cómo debería cambiarlo para que funcione?

JFormattedTextField formattedTextField = new JFormattedTextField(); formattedTextField.setBounds(25, 330, 56, 20); contentPanel.add(formattedTextField); formattedTextField.setValue(new Double(10.0));


Necesitas configurar un formateador:

NumberFormat f = NumberFormat.getNumberInstance(); JFormattedTextField field = new JFormattedTextField(f);

Echar un vistazo:
Formato
y
Formato numérico

Entonces prueba esto:

PlainDocument doc = new PlainDocument(); doc.setDocumentFilter(new DocumentFilter() { @Override public void insertString(FilterBypass fb, int off, String str, AttributeSet attr) throws BadLocationException { fb.insertString(off, str.replaceAll("//D++", ""), attr); // remove non-digits } @Override public void replace(FilterBypass fb, int off, int len, String str, AttributeSet attr) throws BadLocationException { fb.replace(off, len, str.replaceAll("//D++", ""), attr); // remove non-digits } }); JFormattedTextField field = new JFormattedTextField(); field.setDocument(doc);


Un JFormattedTextField se puede usar para muchas cosas, también se puede usar para filtrar fechas o números de teléfono. Necesitarás establecer un NumberFormater en el TextField o usar el DocumentFilter (también funciona con JTextField).

Compruebe este fragmento de código, así es como permite solo dígitos en JTextField, utilizando DocumentFilter, de la manera más efectiva:

import java.awt.*; import javax.swing.*; import javax.swing.text.AbstractDocument; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.DocumentFilter; import javax.swing.text.DocumentFilter.FilterBypass; public class InputInteger { private JTextField tField; private MyDocumentFilter documentFilter; private void displayGUI() { JFrame frame = new JFrame("Input Integer Example"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); JPanel contentPane = new JPanel(); contentPane.setBorder( BorderFactory.createEmptyBorder(5, 5, 5, 5)); tField = new JTextField(10); ((AbstractDocument)tField.getDocument()).setDocumentFilter( new MyDocumentFilter()); contentPane.add(tField); frame.setContentPane(contentPane); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { new InputInteger().displayGUI(); } }; EventQueue.invokeLater(runnable); } } class MyDocumentFilter extends DocumentFilter { @Override public void insertString(DocumentFilter.FilterBypass fp , int offset, String string, AttributeSet aset) throws BadLocationException { int len = string.length(); boolean isValidInteger = true; for (int i = 0; i < len; i++) { if (!Character.isDigit(string.charAt(i))) { isValidInteger = false; break; } } if (isValidInteger) super.insertString(fp, offset, string, aset); else Toolkit.getDefaultToolkit().beep(); } @Override public void replace(DocumentFilter.FilterBypass fp, int offset , int length, String string, AttributeSet aset) throws BadLocationException { int len = string.length(); boolean isValidInteger = true; for (int i = 0; i < len; i++) { if (!Character.isDigit(string.charAt(i))) { isValidInteger = false; break; } } if (isValidInteger) super.replace(fp, offset, length, string, aset); else Toolkit.getDefaultToolkit().beep(); } }