Как я могу сделать JtextField, как DateField, в котором слэш (/) постоянно добавляется - PullRequest
0 голосов
/ 29 августа 2018

Как мне сделать JtextField как DateField, который содержит постоянно видимые косые черты, разделяющие значения месяца, дня и года. Как и в примере ниже, косые черты видны, когда поле пустое, и когда пользователь вводит значение, значение даты будет проходить вокруг косых черт. То есть, если пользователь введет 031618 в поле, оно будет выглядеть как 03/16/18:

the textField will look like this in which

Я видел примеры этого в сети, поэтому я знаю, что это возможно, но я не знаю, как заставить это работать самостоятельно.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018
import java.awt.*;
import java.text.ParseException;
import javax.swing.*;
import javax.swing.text.MaskFormatter;

public final class MaskFormatterTest {
  private Component makeUI() {
    String mask = "##/##/##";
    JFormattedTextField field = new JFormattedTextField(createFormatter(mask));
    field.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
    field.setText("031618");

    JPanel p = new JPanel(new GridLayout(2, 1, 10, 10));
    p.add(field);
    p.add(new JTextField("03/16/18"));

    JPanel panel = new JPanel(new BorderLayout());
    panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
    panel.add(p, BorderLayout.NORTH);
    return panel;
  }
  protected static MaskFormatter createFormatter(String s) {
    MaskFormatter formatter = null;
    try {
      formatter = new MaskFormatter(s);
    } catch (ParseException ex) {
      System.err.println("formatter is bad: " + ex.getMessage());
    }
    return formatter;
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(() -> {
      JFrame f = new JFrame();
      f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      f.getContentPane().add(new MaskFormatterTest().makeUI());
      f.setSize(320, 240);
      f.setLocationRelativeTo(null);
      f.setVisible(true);
    });
  }
}
0 голосов
/ 29 августа 2018

Вам нужно использовать JFormattedTextField вместо JTextField и использовать класс SimpleDateFormat, например, так:

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
JFormattedTextField field = new JFormattedTextField(dateFormat);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...