elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Formateo dinámico en JTextField
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Formateo dinámico en JTextField  (Leído 2,078 veces)
JenselG

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Formateo dinámico en JTextField
« en: 1 Mayo 2019, 19:50 pm »

Hola a todos, necesito ayuda para lograr un formateo dinámico en un JTextField.

Necesito que al ingresar un código numérico de 10 dígitos el JTextField lo ordene en pares separados por espacios. Es decir que al ingresar el código 0123456789 quede así 01 23 45 67 89, todo eso en tiempo real.

¿Como puedo hacerlo?

(El código se trata como una cadena no como entero).

Gracias.


En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Formateo dinámico en JTextField
« Respuesta #1 en: 1 Mayo 2019, 20:13 pm »

Te refieres a cuando obtengas el valor del JTextField que lo formateé de esa manera?


En línea



rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen ki
JenselG

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Formateo dinámico en JTextField
« Respuesta #2 en: 1 Mayo 2019, 20:23 pm »

Si a eso me refiero, que al ingresar los números se vayan ordenando automáticamente
En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Formateo dinámico en JTextField
« Respuesta #3 en: 1 Mayo 2019, 20:34 pm »

  • Primero obtén el valor del JTextField
  • Conviértelos a un array lista lo que quieras, que sea un array o lista XD
  • Luego recorres esa lista
  • Cuentas 2 posiciones y le setteas un " "  >:D



Código
  1. package com.prueba.foro;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.util.function.Predicate;
  5. import java.util.stream.Collectors;
  6. import java.util.stream.IntStream;
  7.  
  8. /**
  9.  * @autor rub´n
  10.  */
  11. public class FormatearJTextField extends JFrame {
  12.  
  13.    private final JLabel jLabelTitulo = new JLabel("Introduce 10 números, enter para validar");
  14.    private final JTextField jTextField = new JTextField();
  15.    private final JLabel jLabel = new JLabel("Resultado: ");
  16.    private final JPanel mainJPanel = new JPanel();
  17.  
  18.    private static final String ESPACIOS = "\\s+";
  19.    private static final String LETRAS = "[a-zA-Z]+";
  20.    private static final String NUMEROS_HASTA_10 = "[0-9]{10}";
  21.    private static final String NUMEROS = "[0-9]+";
  22.  
  23.    public FormatearJTextField() {
  24.        super("Formatear JTextField 00 00 00...");
  25.  
  26.        configureLayouts();
  27.  
  28.        configureJFrame();
  29.    }
  30.  
  31.    private void configureJFrame() {
  32.        add(mainJPanel);
  33.        setResizable(Boolean.FALSE);
  34.        setPreferredSize(new Dimension(366, 150));
  35.        pack();
  36.        setLocationRelativeTo(null);
  37.        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  38.        setVisible(true);
  39.    }
  40.  
  41.    private void configureLayouts() {
  42.        mainJPanel.setLayout(new BoxLayout(mainJPanel, BoxLayout.Y_AXIS));
  43.        mainJPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
  44.        mainJPanel.add(jLabelTitulo, BorderLayout.NORTH);
  45.        mainJPanel.add(Box.createVerticalStrut(20));
  46.        mainJPanel.add(jTextField, BorderLayout.CENTER);
  47.        mainJPanel.add(Box.createVerticalStrut(20));
  48.        mainJPanel.add(jLabel, BorderLayout.SOUTH);
  49.  
  50.        listenerJTextField();
  51.    }
  52.  
  53.    /**
  54.      * Listener del JTextField
  55.      */
  56.    private void listenerJTextField() {
  57.        jTextField.addActionListener(e -> {
  58.            final String valor = jTextField.getText();
  59.  
  60.            final Predicate<String> predicate = p -> p.replaceAll(ESPACIOS,"")
  61.                    .matches(NUMEROS_HASTA_10);
  62.  
  63.            if (validar(valor, predicate)) {
  64.                JOptionPane.showMessageDialog(null, "Valores correctos");
  65.  
  66.                final char[] chars = valor.toCharArray();
  67.                String sResultado = IntStream.range(0, chars.length)
  68.                        .mapToObj(index -> chars[index])
  69.                        .collect(Collectors.toList())
  70.                        .toString()
  71.                        .replaceAll(ESPACIOS, "")//quitar espacios en blanco
  72.                        .replaceAll(",", "")//remover ,
  73.                        .replaceAll("\\[", "")//remover [
  74.                        .replaceAll("\\]", "");//remover ]
  75.  
  76.                final StringBuilder sb = new StringBuilder();
  77.                for (int f = 0; f < sResultado.length() - 1; f += 2) {
  78.                    sb.append(sResultado.substring(f, (f + 2)).concat(" "));
  79.                }
  80.  
  81.                jLabel.setText("");
  82.                jLabel.setText("Resultado: " + sb.toString());
  83.                jTextField.setText(sb.toString());
  84.  
  85.            } else {
  86.                final String sError = valor.replaceAll(ESPACIOS,"");
  87.                if (validar(sError, p -> p.matches(LETRAS))) {
  88.                    JOptionPane.showMessageDialog(null, "Valores invalidos");
  89.                 } else if(validar(sError, p -> p.matches(NUMEROS))) {
  90.                    JOptionPane.showMessageDialog(null, "cantidad de numeros es: " + sError.length());
  91.                } else {
  92.                    JOptionPane.showMessageDialog(null, "Valores invalidos");
  93.                }
  94.            }
  95.        });
  96.    }
  97.  
  98.    /**
  99.      * Validador
  100.      *
  101.      * @param value valor obtenido del JTextField
  102.      * @return boolean
  103.      */
  104.    private boolean validar(final String value, final Predicate<String> predicate) {
  105.        return predicate.test(value);
  106.    }
  107.  
  108.    public static void main(String... blabla) {
  109.        new Thread(FormatearJTextField::new).start();
  110.    }
  111. }
  112.  

« Última modificación: 21 Marzo 2020, 13:15 pm por rub'n » En línea



rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen ki
JenselG

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Formateo dinámico en JTextField
« Respuesta #4 en: 2 Mayo 2019, 19:09 pm »

Muchas muchas muchas gracias amigo, :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pasar de una JTextField
Java
mapers 6 11,776 Último mensaje 10 Abril 2011, 02:07 am
por Shell Root
jTextField
Java
mapers 2 3,999 Último mensaje 3 Abril 2011, 03:59 am
por sapito169
Duda JTextField
Java
charmedever 3 2,661 Último mensaje 6 Julio 2012, 18:54 pm
por charmedever
Ayuda JTextField
Java
charmedever 1 2,492 Último mensaje 10 Julio 2012, 06:32 am
por leogtz
Imprimir int en jTextField
Java
goyito19 2 2,650 Último mensaje 12 Junio 2014, 07:29 am
por goyito19
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines