MaskFormatter a un TextField para número de telefono en Java Eclipse WindowsBuilder

Mí código del TextField:

JTextField txtNumeroDeOrigen = new JTextField();
txtNumeroDeOrigen.setBounds(237, 11, 125, 20);
contentPane.add(txtNumeroDeOrigen);
txtNumeroDeOrigen.setColumns(10);

En ese campo yo solicito un número de telefono: ###-###-####. El usuario ingresa, ejemplo: 7875556666

Me gustaría tener un MaskFormatter, para que escriba en el TextField, ejemplo: (787) 555-6666.

Así aprovecho y solo permito el ingreso de números, y no letras o signos raros.

He visto ejemplos pero, no me funcionan. Alguna solución simple?.

Saludos!.

4
задан 18.11.2016, 22:20
3 ответа

Вместо JTextField, ты можешь использовать JFormattedTextField* и, кроме того, инстанция javax.swing.text.MaskFormatter. А именно (например):

import java.text.ParseException;

import javax.swing.JFormattedTextField;
import javax.swing.JOptionPane;
import javax.swing.text.MaskFormatter;

public class Main {

    public static void main(String[] args) throws ParseException {
        MaskFormatter formatter = new MaskFormatter("(###) ###-####");
        JFormattedTextField textField = new JFormattedTextField(formatter);
        JOptionPane.showMessageDialog(null, textField);
    }

}

sin datos

introducir la descripción de la imagen aquí


*, Чтобы знать больше, ты можешь бросать беглый взгляд в How to Use Форматтед Текст Fields внутри The Java Tutorials.

3
ответ дан 24.11.2019, 12:31
  • 1
    Привет, я отнесся и у меня есть та же ошибка, которая предстала передо мной с предыдущими примерами. Я комментирую, что я имею instanciados эти: import javax.swing. JFormattedTextField; import javax.swing.text. MaskFormatter;. Потом, aquí ошибка: oi63.tinypic.com/2l8hg8i.jpg , надеялся, что ты можешь помогать мне, спасибо заранее. – RRGT19 18.11.2016, 23:29
  • 2
    @RobertGomez Добавлять throws ParseException не забывать. – Dev. Joel 18.11.2016, 23:34
  • 3
    У меня мой класс названный GUI есть, правильно делать другой main с throws ParseException внутри моего main GUI?. Я имею: public class GUI extends JFrame {, и после этого у меня есть мой GUI, или же, frame: public GUI () {. – RRGT19 19.11.2016, 00:04
  • 4
    Aquí encontrará s другой вариант того же самого. Adicionalmente, воодушевил тебя знать má s и властвовать над языком. – Paul Vargas 19.11.2016, 00:42
  • 5
    Сделанный, мне удалось сделать это спасибо, даже я изучаю WindowsBuilder, понемногу. У меня есть последний вопрос, у меня есть так называемая кнопка отлаживать, который оставляет в мишени все поля, включая " (___) ___-____" поля nú морской окунь telefonco. Линии исчезают, как я могу способствовать тому, чтобы появились линии снова?, без чисел?. Спасибо за помогание мне, за него тебе благодарен много. – RRGT19 19.11.2016, 01:13

OpciГіn, выдвинутая из-за @Paul хорошая. Использовать JFormattedTextField , чтобы иметь вышеупомянутую маску, но для одного TextField podrГ, - чтобы создавать класс, который он увеличивал бы PlainDocument , оценивая посредством mГ©todo insertString согласно формату, который хочет быть данным ему. (para el ejemplo (###)###-###. sería)

public class Mascara extends PlainDocument {

  public void insertString(int arg0, String arg1, AttributeSet arg2) 
    throws BadLocationException
   {
       /* Verificamos si la entrada es un número */
       if(Character.isDigit(arg1.charAt(0)))
       {

          switch(arg0)
          {
              /* si está vacía insertamos el (  */
              case 0: 
                   super.insertString(arg0,"("+ arg1, arg2);
                   break;
              case 4: 
                   super.insertString(arg0, ") "+arg1, arg2);
                   break;
              case 9:
                   super.insertString(arg0, "-"+arg1, arg2);
                   break;
              case 14:/* si es 13 entonces no permitimos que sea ingresado el valor*/
                   return;
              default:
                  super.insertString(arg0, arg1, arg2);
          }

       }

   }
}

AsignarГ - В Document в TextField asГ-:

public static void main(String[] args) {
   JTextField txt = new JTextField();
   txt.setDocument(new Mascara());
   JOptionPane.showMessageDialog(null, txt);
}
2
ответ дан 24.11.2019, 12:31
  • 1
    Probé твой solució n и функционируй но, ты знаешь о какой-то форме, чтобы добавлять textfield: (___) ___-____, по мере того, как ограда когда пишут nú морские окуни, они наполняются они _? – RRGT19 19.11.2016, 00:11
  • 2
    podrí чтобы реализовывать, но для вышеупомянутого задания существуй JFormattedTextField, он упрощает тебе вещи. я выставил está такой ответ как opció n. :) – Dev. Joel 19.11.2016, 00:26
  • 3
    У меня мой класс названный GUI есть, правильно делать другой main с throws ParseException внутри моего main GUI?. Я имею: public class GUI extends JFrame {, и после этого у меня есть мой GUI, или же, frame: public GUI () {. Dó nde pondrí в throws ParseException? – RRGT19 19.11.2016, 00:34
  • 4
    дело в том, что я не использую никакого main в моей программе. Ничего страшного?, или же, я использую Затмение и делаю интерфейс с Windowsbuilder, эта не верила ни в какой main в коде, поэтому я спрашиваю у тебя, что где pondrí в throws ParseException, так как я не считаю с main. – RRGT19 19.11.2016, 00:40
  • 5
    В двух, в main (где ты делаешь инстанцию твоего GUI) и в строителе твоего GUI así public GUI() throws ParseException{ ... }... странный, что у тебя нет mé совсем main , так как без está не podrí схвати скроллировать программу. – Dev. Joel 19.11.2016, 00:44

ты можешь использовать String.replaceFirst()

long phoneNum = 123456789L;
System.out.println(String.valueOf(phoneNum).replaceFirst("(\\d{3})(\\d{3})(\\d+)", "($1)-$2-$3"));
1
ответ дан 24.11.2019, 12:31